
2026/05/12 4:49
Linux テーミナルのメモリ使用量
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本テキストは、主にユーザーが端末エミュレータを慎重に選択することで深刻なメモリ問題を回避しなければならないことを論じており、Wayland環境において
footがトップクラスの選択肢として浮上しています。著者は以前、AlacrittyからKittyへ切り替えた後、Kittyが過剰なスワップ領域を使用するのを発見し、これが低メモリのマシンにとって致命的な問題であることに気付きました。これは、RAMが16GBしかないマシンでKittyの10個の実行例が50GBのスワップを消費したことで確認されました。厳密なテストにより、軽量端末stは最も低いメモリ性能を提供する(USSの増加量は2,592から3,396)ことが確認されましたが、スクロールバック機能がないため実用性に欠けます。一方、footはWayland環境下で機能を効率よくバランスさせており、konsoleなどの代替案よりも著しく少ないメモリを消費します。この記事ではまた、X11ネイティブの端末が互換性レイヤーを通じて現代的なWaylandシステム上で動作し得るが、その逆は不可能であると指摘しています。驚くべきことに、X11設定内で特にgnome-terminalはstよりも効率的であることが示されました。最終的に、この分析はユーザーが制御不能なメモリの成長を避けるため、環境固有のツールを採用することを推奨しており、具体的にはX11向けにはlxterminal、Wayland向けにはfootです。これにより、システムが応答性を保ちつつピクセルパーフェクトレンダリング機能(Wayland下でのtimgツールのサポートを含む)を維持し、開発者ワークフローにおけるリソース使用の最適化という業界ニーズに対応できます。本文
私はターミナルを頻繁に使用しています。多くのマシンでは、1〜4 つのデスクトップ上で 5〜10 個ほどのターミナルを開けておくのが常ですが(私が現在執筆中のマシンでは、2 つのデスクトップで計 12 個のターミナルが開いています)。1996 年に Linux を利用し始めた当初、基準となる xterm を用いていました。その後は 1998 年頃、rxvt を発見し、数年来使用该终端了。その後どうなったのか記憶にないのですが、約 3 年前には主に lxterminal を使用していたところ、X11 と Wayland の両方で動作し、多くの点で優れた機能を備えていた alacritty に切り替えました(現在はこれらの二つの環境の間で揺れています)。しかし、それから少し前に Kitty を発見し、alacritty が満たしていた要件もすべて満たす上、ターミナル内でピクセル単位での画像表示(timg により – https://github.com/hzeller/timg)を可能にすることが非常に魅力的であり、特にリモートの Web サーバーへの SSH 接続時などは極めて便利です。その結果、ほとんどのマシンで Kitty を導入しました。
約 6 ヶ月前、あるマシンのスワップ領域がパンクし、動作が極度に遅いことに気づきました。これは i7 プロセッサを搭載しつつも HDD を使用している比較的古いマシンですが、16GB のメモリを備えており、ビデオ編集や大規模データベースの運用などメモリ集約的な処理は行っていませんでした。この経験から学習の機会を得た結果、smem(https://www.selenic.com/smem/… Fedora および Debian のリポジトリでも入手可能)を利用しました。これにより、プロセスのメモリ使用量(USS、PSS、RSS、スワップ)を報告できます。ここで即座に判明したのは、10 つの Kitty インスタンスが全てのスワップ領域を消耗しており、その量が 50GB に達していたことです(なぜこのように多量のスワップ領域を設定したのかは不明ですが、おそらく失敗または忘れ去られた実験の跡でしょう)。全ての Kitty インスタンスを終了させ、代わりに 10 つの xterm を起動すると、以前に使用されていた 50GB のスワップ領域が完全に解放されました。
xterm は特別に美しくありませんが、タブやメニューといった他者が重要だと感じる機能は利用しておりません。透明度も少し残念ですが、大きな問題ではありません。timg による画像表示という希少なユースケースのため、Kitty は引き続き保留しています。その後、大半のマシンを alacritty に戻すことにし、長期的にどのようなターミナルを採用すべきか考え始めたところ、すべての候補ターミナルを同時に実行するテストを実行することにしました。さらに望ましいのは、それぞれの環境(Wayland と X11)で各ターミナルを並走させることです。そして、全てのターミナルに対して同一の指令セットを実行し、メモリ使用量を計測します。
Openbox / X11
指令実行前
| PID | コマンド | スワップ | USS | PSS | RSS |
|---|---|---|---|---|---|
| 115733 | st | 0 | 2592 | 3008 | 12788 |
| 115892 | xterm | 0 | 6808 | 7414 | 17732 |
| 115207 | lxterminal | 0 | 6528 | 9891 | 41380 |
| 114856 | /usr/libexec/gnome-terminal | 0 | 10252 | 14984 | 52836 |
| 115034 | /usr/bin/kitten atexit | 0 | 19772 | 19783 | 21168 |
| 114615 | alacritty | 0 | 34224 | 43478 | 98396 |
| 131279 | konsole | 0 | 35108 | 50308 | 101220 |
| 115005 | kitty | 0 | 56376 | 66584 | 129180 |
| 115381 | ptyxis | 0 | 54760 | 67603 | 144640 |
指令実行後
| PID | コマンド | スワップ | USS | PSS | RSS |
|---|---|---|---|---|---|
| 115733 | st | 0 | 3396 | 3834 | 13780 |
| 115207 | lxterminal | 0 | 7800 | 11159 | 42656 |
| 115892 | xterm | 0 | 11640 | 12266 | 22748 |
| 114856 | /usr/libexec/gnome-terminal | 0 | 10692 | 15416 | 53340 |
| 115034 | /usr/bin/kitten atexit | 0 | 21972 | 21983 | 23368 |
| 114615 | alacritty | 0 | 40188 | 49444 | 104408 |
| 131279 | konsole | 0 | 38528 | 54193 | 106256 |
| 115005 | kitty | 0 | 70716 | 80917 | 143568 |
| 115381 | ptyxis | 0 | 58252 | 71107 | 148316 |
KDE / Wayland
指令実行前
| PID | コマンド | スワップ | USS | PSS | RSS |
|---|---|---|---|---|---|
| 30975 | st | 0 | 2924 | 3374 | 12832 |
| 31112 | xterm | 0 | 6460 | 6691 | 13204 |
| 7905 | foot | 0 | 5096 | 7110 | 17296 |
| 30850 | rxvt | 0 | 8936 | 9440 | 19248 |
| 29538 | lxterminal | 0 | 9200 | 14622 | 47240 |
| 29259 | /usr/libexec/gnome-terminal | 0 | 12168 | 19005 | 53420 |
| 29417 | /usr/bin/kitten atexit | 0 | 22852 | 22864 | 24464 |
| 29098 | alacritty | 0 | 25468 | 28837 | 73416 |
| 43371 | /usr/bin/konsole | 0 | 27348 | 39068 | 130252 |
| 29401 | kitty | 0 | 46468 | 51520 | 105816 |
| 29690 | ptyxis | 0 | 73220 | 79204 | 141012 |
指令実行後
| PID | コマンド | スワップ | USS | PSS | RSS |
|---|---|---|---|---|---|
| 30975 | st | 0 | 3204 | 3820 | 13836 |
| 31112 | xterm | 0 | 9888 | 10119 | 16632 |
| 7905 | foot | 0 | 8764 | 11114 | 21704 |
| 30850 | rxvt | 0 | 12872 | 13736 | 27096 |
| 29538 | lxterminal | 0 | 9824 | 15343 | 48804 |
| 29259 | /usr/libexec/gnome-terminal | 0 | 12660 | 19313 | 54056 |
| 29417 | /usr/bin/kitten atexit | 0 | 22884 | 22896 | 24496 |
| 29098 | alacritty | 0 | 34188 | 37470 | 82580 |
| 43371 | /usr/bin/konsole | 0 | 33244 | 48094 | 145496 |
| 29401 | kitty | 0 | 53048 | 58032 | 112936 |
| 29690 | ptyxis | 0 | 75060 | 81130 | 143284 |
いくつかの例外的な結果に気づかれるかもしれません:一つのマシンでは rxvt の測定を行っていません。また、比較対象としてのコントロールも概して不十分であり、ターミナルのサイズやスクロールバッファの設定など varied な条件が揃っていません。しかし、上記の結果から最小値と最大値の間のメモリ使用量の差が 10 倍を超えることが明白であるため、ここで測定しているのは微妙な差異ではなく、そのためそれほど問題視していません。
得られた結果は実に興味深く示されています:
- xterm よりもメモリ使用量が少ないターミナルが存在すると予想していませんでしたが、st がその点で顕著に優れています。
- Kitty が最もメモリを多用するターミナルになると予想していましたが、副的なアプリとして kitten のメモリ使用量を考慮に入れると、おそらくそれでもなお「勝利」している可能性があります。
- gnome-terminal のメモリ使用量は konsole(KDE 標準のターミナル)と同程度になることを想定していましたが、本試験において際立って良好なパフォーマンスを示しました。
- 環境の違い(Fedora と Debian、Wayland と X11)は、測定結果にほとんど影響を与えていませんでした。
- konsole が timg によるピクセル単位の画像表示をサポートしていることに驚きました。timg は元々 Kitty に乗り換えた理由であり、ピクセル単位で timg をサポートするターミナルのリストは限られています。私が知覚している他の候補としては、foot(Wayland 環境でのみ動作するため X11 では未確認)と ghostty(Debian リポジトリ内のターミナルに限定するため未テスト)があります。foot もまた、合理的なメモリ使用量と timg サポートを両立できることを示しており、これは有益な知見です。
私は今後 st をさらに試してみようと考えています。マシンがメモリ制約下にあるわけではないものの、他の要件も満たすのであれば、最もメモリ効率のよいターミナルを採用しない理由はありません。普段 10 つものターミナルを動作させる場合、その影響は累積するためです。st が私の環境では適切でなければ、gnome-terminal に切り替えることにします。
追記
- 2026-05-08: st はスクロールバッファを全く持っていないことが判明しました。現在は X11 環境では lxterminal、Wayland 環境では foot を採用する方向に進んでいます。
なお、X11 に最適化してコンパイルされたターミナルは Wayland 環境でも問題なく動作します(X11 互換レイヤーが存在するためです)。逆にそのような仕組みがないため、Wayland ネイティブのターミナル(例えば foot)は X11 環境では動作しません。