ferdium メモリ使用量が増える理由と、Macで減らす順番
ferdium メモリ使用量を調べる人がまず見ているのは、アクティビティモニタをメモリ順に並べた画面だろう。Ferdiumという名前のプロセスが上のほうにあり、その下にFerdium Helperという名前のプロセスがいくつも並んでいる。合計は体感より大きく、サイドバーにサービスを足すたびに増えていく。
これは不具合ではなく、この道具がやっていることの直接の結果になる。数字はサービスの数からある程度は予測がつく。この記事では、メモリを使っているのは何なのか、アクティビティモニタをどう読めば判断を誤らないのか、実際に減る設定はどれで代償は何か、そして設定では動かせない天井がどこにあるのかを順に整理する。
Webアプリを1つの窓にまとめる道具は、内側にブラウザを抱えている
Gmail、Slack、Notion、社内の管理画面。1日に何度も行き来するWebサービスを1つの窓にまとめる道具は、Ferdiumに限らずElectronという土台の上に作られていることが多い。Electronは、Chromiumというブラウザの中身とNodeの実行環境をアプリに同梱する仕組みだ。
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. 出典: chromium.org
同梱する理由ははっきりしている。GmailやSlackを窓の中で動かすには、それらを動かせるものが要る。それはブラウザだ。つまりこの種のアプリは、ブラウザの上に何かを足しているのではなく、ブラウザそのものを内側に持っている。メモリの見え方はここから決まる。
サイドバーに並ぶサービスは、それぞれが独立した入れ物の中で動く生きたWebページになる。入れ物を分けているのは、サービスをまたいでログイン状態が混ざらないようにするためだ。Chromiumはこの入れ物をプロセスとして分ける作りになっており、アクティビティモニタに並ぶHelperの列がそれにあたる。二重ログインを可能にしている分離と、プロセスが並ぶ理由は同じものになる。
使われているメモリは2つの層に分かれている
1つ目の層は、サービス1つあたりに固定でかかる分だ。独立した入れ物には、中身のWebページを描く前の段階で、エンジンの取り分がある。サービスが10個あれば、その取り分が10個ぶん必要になる。ページ自体がどれだけ軽くても、この層は減らない。
2つ目の層はWebアプリそのもので、多くの場合こちらのほうが大きい。いまの業務用Webアプリは、それ自体が相応の規模のアプリケーションになっている。チャットは会話の履歴と検索用の索引と接続を抱え、ドキュメントの道具は開いたページぶんの描画情報を抱える。これらは普通のブラウザのタブで開いても同じだけかかる費用で、置き場所がサイドバーに変わったからといって小さくはならない。
だから比較の相手は「ブラウザ」ではなく「同じサイトを常時開いたままのタブ」になる。サイドバーに15個並んでいる状態は、同じサイトのタブを15枚開きっぱなしにした状態に、入れ物の取り分を足したものに近い。
もうひとつ、見落としやすい差がある。ブラウザのタブは閉じられるが、サイドバーの項目は閉じられない。タブは窓を閉じたときや操作の弾みで日々減っていくのに対し、サイドバーに登録したサービスは、誰かが意識して削除するまで残り続ける。数か月経つと、この差だけで合計のかなりの割合を占めるようになる。ここは設定ではなく2分の掃除で戻る部分になる。
なお、レシピが用意されていないサービスをURLで追加した場合も、費用のかかり方は同じだ。レシピはアイコンや通知の受け取りを扱う定義であって、ページの読み込み方を変えるものではない。社内の管理画面をURLで足した項目は、その管理画面をブラウザのタブで開いた分だけ費用がかかる。
アクティビティモニタの読み違えを避ける
判断を誤る読み方が2つある。どちらもよく見かける。
1つ目は、プロセス一覧の一番上の行をアプリの合計だと思うことだ。Ferdiumという名前の行は外側の枠にすぎず、サービスの中身はHelperの側にある。実際の数字は一族の合計になるので、子プロセスを展開して見る設定にしてから読みたい。
2つ目は、使用量が大きいこと自体を問題だと思うことだ。macOSはメモリを埋めるように作られている。使われていないメモリは何の仕事もしていないからだ。見るべきなのはメモリプレッシャーのグラフで、通常の作業中に緑のままかどうかが判断の基準になる。使用量が大きくても緑なら、機械は仕事をしている。黄色や赤になり、普通の作業中にスワップの使用量が増え続けるなら、そこで初めて足りていないことになる。
数字が問題になっているとき
1時間ぶりに開いたサービスが白い画面のまま読み込みを始める。ビルドやビデオ会議を始めた瞬間に全体が引っかかる。スワップの使用量が日中ずっと増え続けて戻らない。計算をしていないのにファンが回る。この4つが出ているなら、減らす作業に意味がある。
問題になっていないとき
合計が大きくても、メモリプレッシャーが緑で、切り替えが速く、スワップが増えていないなら、直すものはない。余っているメモリを取り返す作業は、読み込み待ちという代償だけを払って何も返ってこない。
全体の設定に手を付ける前に、どのサービスが重いのかを先に見ておきたい。アクティビティモニタはHelperにサービス名を出さないが、メモリ順に並べたうえで、アプリの中でサービスを1つずつ止めていけば見当は早くつく。多くの場合、1つのサービスが不釣り合いに大きな割合を占めている。その場合の答えは、外側の道具の設定ではなく、そのWebアプリ側の設定にある。アニメーションを止める、チャットが先読みする履歴を減らす、使っていないワークスペースからサインアウトする。こちらのほうが効くことが多い。
効く順番と、それぞれの代償
| 手 | 減る量 | 代償 | やる条件 |
|---|---|---|---|
| 使っていないサービスを削除する | 恒久的に減る | 登録が消えるだけ | 1か月開いていない項目がある |
| Appleシリコン向けのビルドに揃える | 変換の分がなくなる | なし | M系列のMacを使っている |
| ハイバネーションを有効にする | 一番大きい | 復帰時の読み込み待ち、通知の遅れ | メモリプレッシャーが黄や赤 |
| チャットだけ対象から外す | 減らない(使う側) | 重い項目が載ったままになる | 通知の速さが要る |
| 使っていないワークスペースを降ろす | 隠した数に比例する | 戻るときに読み込み直す | 作業文脈が1日に数回変わる |
| アプリを再起動する | 一時的に戻る | 全部を読み込み直す | 何週間も起動しっぱなし |
最初に手を付けるべきなのは、代償のない行になる。サイドバーは溜まる。20個並んでいるサイドバーには、ある週のためだけに足してそのまま残っている項目が4個か5個あることが多い。これを消す作業には代償がなく、消した分は戻ってこない。
ビルドの行も見た目より効く。M系列のMacでIntel向けのビルドを動かすと、変換をはさむ分の費用がすべてのプロセスにかかる。プロセスが十数個ある作りでは、その積み上がりが無視できない。設定を触る前に、どちらのビルドが入っているかを確認しておきたい。
再起動は、最もよく勧められて最も弱い手になる。長く動いたブラウザのエンジンは状態を溜めるので、再起動で戻る分は確かにある。ただし1日で元の水準に戻る。1週間もつ場合は、直っていたのは別のものだ。
ハイバネーションとワークスペースの使い分け
ハイバネーションは、一定時間触っていないサービスをメモリから降ろす仕組みで、この道具で一番大きく効く。降ろしている間は接続が切れているため、復帰時に読み込みが入り、通知は起きたときにまとめて届く。無料で得られる改善ではなく、交換になる。
対象から外すべきなのは、通知が遅れると実害が出るサービスだ。相手が待っているチャット、問い合わせの窓口、当番中の監視画面が該当する。これらはたいていサイドバーの中で最も重い項目だが、起きたときに届く通知は通知として機能しないので、例外に置く。
それ以外は対象にしてよい。1日に2回見る管理画面、課題管理、社内のWiki、URLを忘れないために置いているだけの項目。降ろす代償は使う瞬間の数秒の読み込みで、残りの時間はメモリが返ってくる。
ワークスペースは、サービスをまとめて表示を絞る仕組みで、こちらは「隠す」動作になる。作業文脈の外にあるサービスを読み込んだままにするかどうかの設定があり、読み込んだままにすると、サイドバーは短くなってもメモリの合計は動かない。降ろす設定にすると、文脈を離れたときに解放され、戻るときに読み込み直す。1時間に何度も文脈をまたぐ人は読み込んだままが向き、午前と午後で文脈が変わる人は降ろす設定が向く。
終わった案件のワークスペースを残さないことも効く。使われていないワークスペースは、何か月も誰も考えていないサービスが溜まる場所になりやすい。案件が終わった時点でワークスペースごと削除すれば、そこに紐づいていたサービスも一緒に見直せる。
降ろすまでの待ち時間も、既定のまま使うのではなく決めておきたい。短く設定すると取り返す量は増えるが、読み込み直す回数も増えるため、待たされる場面として表に出る。長く設定すると取り返す量は減るかわりに、作業が中断されることはほとんどなくなる。メモリプレッシャーが緑のままの機械では、そもそも短い時間に設定する理由がない。
設定では動かせない天井
設定で数字はかなり動く。動かないのは、全部を1つの窓に入れるという形そのものになる。
サービスは1つの窓の中の1つのアイコンの後ろにある。だからアプリの一覧には1行として並ぶ。同時に、全体が運命を共にする。落ちるときは全部まとめて落ち、1つのWebアプリの調子が悪いと、他が正常でも窓全体が重く感じられる。
そしてメモリの問いと注意の問いは、1つの設定の表と裏になっている。サービスを降ろせば機械は軽くなり、そのサービスに着くのは遅くなる。両方を同時に良くする設定は無い。
別の形もある。サービスごとに窓を持たせて、そこにログイン状態も置いておく形だ。この形では、作業のまとまりが一覧の一部ではなく配置になり、切り替えの対象が入れ物ではなくアプリそのものになる。Webアプリが軽くなるわけではないが、費用を払う場所が変わる。アプリごとに独立したワークスペースで作業文脈を切り替える考え方はワークスペースに整理してある。窓ごとに何を持たせるかはできることにまとまっており、Ferdiumとの違いをセッションや窓の扱いで並べたものはFerdiumとの比較にある。
手を付ける順番としては、まずアクティビティモニタでメモリプレッシャーのグラフを見る。緑なら取り返すものは無い。黄や赤なら、1か月開いていないサービスを消し、ハイバネーションを長めの時間で有効にし、チャットを例外に置く。数字は問題なく、詰まっているのが目的のサービスを探す動作のほうなら、それは別の問題になる。
よくある質問
サービスを10個入れた場合、メモリはどのくらいが普通ですか?
一律の目安は出せません。合計を決めているのは数よりも中身で、軽い管理画面が10個ある状態と、チャットが10個ある状態では大きく違います。実用的な比較相手は、同じサイトのタブを10枚開きっぱなしにした状態で、だいたいその近辺に収まります。
ハイバネーションを有効にすると通知は届かなくなりますか?
降ろされているサービスは接続が切れているため、通知は起きたときにまとめて届きます。相手が待っているチャットや問い合わせの窓口は、サービスごとの例外設定で対象から外すのが前提になります。重い項目ほど外したくなるので、通知の速さが要るかどうかで決めてください。
Ferdiumは他の同種のアプリより重いのですか?
この分野の道具はどれもブラウザの仕組みを内側に抱えてWebページを動かすため、費用のかかり方は大きくは変わりません。差が出るのは外側ではなく、並べているサービスの中身のほうです。メモリを抑える設定がどのプランで使えるかには差があり、Ferdiumは無料で機能の切り分けがない側になります。
一日の終わりにメモリが増えているのはなぜですか?
長時間動いたブラウザのエンジンは状態を溜め、その中のWebアプリも、読み込んだメッセージや文書や検索用の情報を使うほど抱えていくためです。再起動すれば朝の水準に戻り、翌日また同じように増えます。ハイバネーションは増え方を抑える手であって、増えること自体を止める手ではありません。