非常に遅いEmacsをトラブルシューティングするにはどうすればよいですか?


41

私はドキュメントを書いていますが、昨日登場したと思うEmacsのパフォーマンスに問題があります。initファイルに変更を加えたり、新しいパッケージをインストールしたりしていません。

問題は、執筆中に、キーボードの文字を押してから画面に表示するまでに非常に顕著な遅れがあることです。単語を入力し終わった後でも、画面に印刷されているのを見ることがあります。

タイピングの速度以外の問題があるかどうかはわかりませんが(あるとしか推測できません)、気づいていません。

この問題の原因は何ですか?
それはEmacsによるものですか、それとも私のPCのパフォーマンスによるものですか?一般的に、Emacsのパフォーマンスに影響する変数は何ですか?

私のEmacsのバージョンはGNU Emacs 24.3.1です

主なアクティブモードは次のとおりです。

  1. ラテックス

マイナーアクティブモードは次のとおりです。

  1. オートコンプリート
  2. 自動構成
  3. 自動圧縮
  4. 自動暗号化
  5. 点滅カーソル
  6. ファイル名シャドー
  7. フォントロック
  8. グローバルオートコンプリート
  9. グローバルフォントロックグローバルHlライン
  10. 行番号
  11. マウスホイール
  12. Shell-Dirtrack
  13. ショーパレン
  14. Smartparens
  15. Smartparens-Global
  16. ツールチップトランジェントマーク

5
C-h mメジャーモードとアクティブなすべてのマイナーモードが表示されます。原因を突き止めるまで、各マイナーモードをゆっくりと無効にすることができます。メジャーモード自体である可能性がありますが、マイナーモードが最も可能性の高い容疑者です。使用しているモードを指定しないと、ここの誰もが問題で何が起こっているかを暗闇の中で突き刺すことになります。特別な画像で発生するまれな状況があります-たとえば、誰かが電話のシンボルやiPhoneの他の特別なシンボルを私にメールで送信した場合-それは特別なシンボルによって引き起こされる孤立したスローダウンの問題です。
法律家

2
linum-mode大きなバッファではパフォーマンスが低下します。 nlinum-modeStefanによって書かれたものは、より大きなバッファに適しています。
法律家

コンピューターで何が起こっていますか?どのくらいのメモリが使用されていますか?CPUはどのくらいアクティブで、どのプログラムがその使用のほとんどを担当していますか?問題は他のプログラムにある可能性があります。
デイブ

2
ああ、私はこの参照を別のスレッドに投稿しました:gnu.org/software/emacs/manual/html_node/elisp/Profiling.html-これは良いスタートです。また、暗闇の中でのショット:font-lockを無効にしてみてくださいgnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html-これは私の最初の通常の容疑者です(多くの場合、正当にCPUサイクルの大部分を占めます)。
wvxvw

1
これらのコメントの膨大な数の提案は、この質問が少し曖昧すぎることを示しています。解決策ではなく、説明を求めるためにタイトルを書き直しました。それに応じて回答も提供しました。これらの指示に従って新しい質問をするか、明確でない場合はコメントを残してください。
マラバルバ14

回答:


64

この問題の原因は何ですか?それはEmacsによるものですか、それとも私のPCのパフォーマンスによるものですか?一般的に、Emacsのパフォーマンスに影響する変数は何ですか?

Emacsには、約50,000個の内部変数と、それぞれ数十個の変数を平均する数千個の外部パッケージがありますが、一般的な意味でこれに答えることは期待できません。:-)

質問の下のコメントスレッドを見るだけで、それを確認できます。そこには半ダースの異なる提案があり、すべて同じように有効です。

問題を特定するために何ができますか?

オプション1:モードを無効にする

リストしたマイナーモードの無効化を開始し、どのモードがパフォーマンスの問題を解決するかを確認します。私はで始まるだろうsmartparensauto-completeline-numberfont-lockして、リストを下に従ってください。

「昨日、この問題はありませんでした」とは、ごくわずかであることを意味し、過度に依存しないことを意味します。何かが解決するまで、マイナーモードの無効化を開始します。

どのマイナーモードでも問題が解決しない場合は、どのスニペットが原因であるかがわかるまで、initファイルの一部をコメントアウトし始めます。いずれにせよ、より具体的な何かがある場合は、新しい質問をしてください。

オプション2:プロファイラー

  1. 呼び出しM-x profiler-start RET RET(2番目RETは確認することですcpu);
  2. いくつかの入力、できれば段落全体以上を実行してください。
  3. 呼び出しM-x profiler-reportます。

これにより、各関数にかかるCPU時間を説明するバッファーが得られます。TAB行を押すと、その行が展開され、その中の機能が表示されます。どの関数が多くのCPU時間を消費しているかがわかるまで、このバッファーをナビゲートします。

その後何をしますか?

ラグを引き起こす関数、パッケージ、またはスニペットを見つけると、次のことができます(順不同)。

  • その特定のマイナーモード(または関数またはスニペット)に関してここで新しい質問をしてください。
  • パッケージメンテナーにバグを報告してください。
    • パッケージのソースファイルの上部にあるコメントを確認してください。URLが含まれている場合(特にgithub上)、おそらくそこに問題トラッカーがあります。
    • 一部のパッケージには、などのコマンドがありM-x PACKAGE-bug-reportます。
    • 彼または彼女の電子メールは、パッケージのソースファイルの先頭にある必要があります。
  • 組み込みパッケージの場合は、で報告できますM-x report-emacs-bug
  • 組み込みではないパッケージでも、help-gnu-emacsメーリングリストで助けを求めることができます。

4
これらは素晴らしい指示です。どうもありがとうございました!私の批判のコメントで言ったように、私はそれが曖昧になることを知りませんでした。Emacsの専門家(多くの人がそうであるように)にとって、答えは初歩的なものだと思いました。とにかく、この「ガイド」は素晴らしく、私の質問がそれにつながることを嬉しく思います。:)
アダム14

3
プロファイラーを使用する場合は+100000。(私のように)愚かで、誤ってすべてのバッファーのモード行に高価な関数呼び出しを追加するようなことをする場合、これは何が起こっているのかを確実にする方法です。
ラドンロズバラ16

マイナーモードを無効にする方法 有効なマイナーモード:Async-Bytecomp-Package Auto-Complete Auto-Composition Auto-Compression File-Name-Shadow Flycheck Flyspell Font-Lock Global-Auto-Complete Global-Auto-Revert Global-Eldoc Global-Flycheck Global-Font-Lock Global -Git-Commit Global-Hl-Line Global-Hungry-Delete Global-Linum Line-Number Linum Magit-Auto-Revert Org-Bullets Org-Indent Override-Global Projectile Pyvenv Recentf Save-Place Shell-Dirtrack Show-Paren Show-SmartparensショーSmartparensグローバルサイズ表示Smartparens Smartparensグローバル
ストライカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.