職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

PhpStormが重いのをどうにかした話

ここ数週間ほどPhpStormが重くて困っていたのですが、無事に解決できたのでその記録です。
JetBrains社さんのIntelliJ系列のIDEなら基本的にどれも同じだと思いますが、私はPHPを最もよく使うせいか症状と改善はPhpStormでのみ体験したので、表題はPhpStormとしました。

環境情報

  • 問題のあったマシン : MacBook Air (early-2020) / Intel Core i7 / 16GB RAM
  • 比較対象のマシン : Mac mini (2018) / Intel Core i5 / 32GB RAM
  • PhpStorm : 2022.2.12022.2.2 Preview
  • いずれのマシンも、リポジトリの working copy はMacのストレージにあり、Dockerコンテナにフォルダをマウントさせて、DockerでPHP等を実行している状態。
  • OSはいずれも macOS Monterey 12.5

現象 : どのように重かったのか?

  • 1文字打つ度に0.3秒ほど、遅い時で0.8秒ほど*1待たされる。
    • キーを打ち込んで待っている間に command-tab で別のアプリに切り替えたとしてもキー入力は PhpStorm に飛んでおり、切り替え先のアプリにキー入力が取られるということは無かった。OSの立場で言えば、キー入力のイベントをPhpStormに伝えるというお仕事は普通にこなしていたのだろう。
  • ソースコードのファイルを開いてスクロールするとき、そもそもスクロールが凄く遅くて時間がかかる。300行ほどのphpファイルで、一番上から一番したにスクロールするのでも数秒ほどかかる。
  • これらの重さを体感するときにアクティビティモニタでCPUの負荷を見ると、PhpStormによるCPU使用率が400%近い値を示していた。他のプロセスは高くても30%程度

試したこと(効果無し)

まず、他のアプリがCPUリソースを食いまくってるのではないかと思いましたが、アクティビティモニタを見てもそのような様子は見受けられませんでした。ハズレ。
次に、メモリ不足を疑い、他のアプリを可能な限りquitしていきましたが、それも効果無しでした。ハズレ。
ここで、スクロールが遅いことは一旦無視して、「キー入力が遅い」点に絞って考えてみました。そして浮かんだ心当たりが、コード補完 (code completion) の機能です。

コード補完の設定画面

ひたすらコード補完の機能を切ってみましたが、やはり効果は無く、ハズレでした。ここで、「キー入力が遅い」ことに集中するのは誤りであって、「スクロールも遅い」という事実に真面目に向き合わなければ、と気付かされました。

さて、アルゴリズム的には通常使用できる範囲で問題なく組まれているのに「遅い」となると、(ネットワーク関係やディスクI/O を無視すると)、やはり「キャッシュ」の存在が気になるよなぁ、ということで調べてみると、Fileメニューの中に Invalidate Caches... という項目がありました。これを使ってキャッシュを消しても、やはり効果はありませんでした。

ネット上の先人たちによる情報

IntelliJ 2022 slow」といったキーワードで検索すると、2019.3.x – 2022.1 editor lagging and scroll performance slowing down with time opened という報告がありましたので真面目に読んだりもしましたが、解決には至りませんでした。

解決に至った対応

ここまで気付かなかった私がアレなのですが、我が家にはJetBrains製のIDEをインストールしたマシンが他にもあったのでしたw そこで、比較対象の Mac mini で同じリポジトリを開いて操作したところ、全く問題なく快適に作業できたのでした。その様子を見てようやく「あ、IDEの設定が壊れてるのかな?」と思い、問題のあったマシンの設定を工場出荷状態に戻したところ……治りました🎉🥳

どの設定が問題だったのかを探る

設定を工場出荷状態に戻すとき、それまでの設定のバックアップが ~/Library/Application Support/JetBrains/{IDE名称}{バージョン}-backup/{日付時刻}/ という場所に吐かれます。じゃあ、問題のあった時代のバックアップと、工場出荷状態に戻した直後でもバックアップを取り、これらを比較すれば問題の設定が何であるのかを特定できる😃と思ったのですが、かなり多くの設定ファイルが吐かれてしまい、この比較はできません*2でした。
せめてファイルサイズだけでも比較してみようと思って、フォルダのサイズを見比べてみると……

PhpStormの設定ファイルのバックアップの、データ容量。上が工場出荷状態でカラーテーマだけ変えたもので520KB。下が重かったときのもので16MB。

かなりの差がありました。

しかし、大きなファイルを辿っていくと、行き着いたのはJDBCドライバのjarファイルでした😇

本当に問題の設定を割り出すには、真面目に設定内容を比較していかないといけないでしょう。期待した読者の皆さん、私が使える時間はここまでです。申し訳ございません🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️

さいごに

IDEが重いだけで、すごいストレスを抱えていました。Appleのサイトを開いてハイスペックなマシンのページを見ることで現実逃避としてみたり、他のIDEを試して「やっぱ操作性がなー」となって戻ってきてしまったりしていました。

「重い」ことの原因とそれに対する解決策は、この記事で出したもの以外にも多く存在するはずで、この記事の解決策をそのまま世の多くのケースに効くなんてことは無いでしょう。それでも、何らかのお役に立てたら幸いです。主に、記憶が薄れた頃の、数年後の自分自身の役に立てたら…!

しょせき

JetBrains製品をもっと使いこなすためには、こういう本を読んでみるのも良いのかなーと思っております(私はまだ読んでいません)(このリンクから購入すると、私に若干のアフィリエイト収入が発生します。)

*1:体感です。私のタイマーはそんなに正確ではありません。

*2:頑張ればできるんですけれども、怠惰な私には無理です😇