Emacs が重たいときの原因を調べる方法をまとめます
メモリ使用量の確認
M-x memory-report でメモリ使用量のレポートが表示できます
レポートは *Memory report* というバッファに表示されます.バッファ上で "g" を押すとレポートが更新されるので,随時"g"を押すだけでメモリ使用量の増減が確認できます
CPU使用量の確認
M-x profiler-start でプロファイラが起動できます
プロファイラには動作Modeが3つあり,
- cpuのみ
- memoryのみ
- cpuとmemoryの両方
の使用状況を収集できます
収集した使用状況は,M-x profiler-report で集計できます
集計結果は,ツリー形式で表示されます
8,284,674 45% + #<byte-code-function 922>
5,672,525 31% + #<byte-code-function 9AC>
3,090,255 16% + command-execute
(以下略)たとえばこの場合は 1行目の部分で全体の45%が使用されています
1行目にカーソルをあわせて,エンターキーを押すと,ツリーのノードが展開されます
8,284,674 45% - #<byte-code-function 922>
8,281,922 45% + git-gutter:update-diffinfo
2,752 0% + git-gutter:process-diff-output
5,672,525 31% + #<byte-code-function 9AC>
3,090,255 16% + command-execute
(以下略)この場合は,git-gutter が45%消費していたことが判りました
ファイルI/Oの確認(Linuxのみ)
straceコマンドを使うと,Emacsがどのファイルを読み書きしているかが判ります
まずは ps コマンドなどをつかって,Emacs のPID(プロセス番号)をしらべます
$ ps awx
PIDがわかったら,PIDを指定して strace コマンドを実行します
$ strace -p PID -o logfile.txt
これで logfile.txt に Emacsが実行してるシステムコールのログが出力されます
がそれぞれ発行されるので, logfile.txt から上記のシステムコールの状況をみれば
どのファイルへのI/Oが発生しているのかが確認できます