Linux ターミナルのメモリ使用量分析:xterm から kitty まで

多くのパワーユーザーにとって、ターミナルは Linux システムと対話するための主要なインターフェースです。シェルやターミナルで実行されるツールのパフォーマンスに注目しがちですが、ターミナルエミュレータ自体のメモリフットプリントはしばしば見落とされがちです。複数の仮想デスクトップにわたって12個以上のインスタンスを実行している場合、これらのオーバーヘッドが蓄積し、システムの動作低下や過度なスワップ使用につながる可能性があります。

この記事では、いくつかの人気のある Linux ターミナルエミュレータのメモリ使用量を調査し、異なるディスプレイサーバー(X11 および Wayland)にわたって実施された実証テストに基づき、どのツールが効率性と機能性の最適なバランスを提供するかを判断します。

メモリの危機:なぜ重要なのか

メモリ使用量は必ずしも明白ではありません。tophtop のような標準的なツールは、共有ライブラリを含む Resident Set Size (RSS) を報告するため、誤解を招くことがあります。プロセスの固有のメモリ寄与度をより正確に把握するには、smem のようなツールが非常に有用です。smem は Proportional Set Size (PSS) を報告し、共有メモリを使用しているプロセス間で共有メモリを分割するため、プロセスが終了したときにどれだけのメモリが解放されるかについて、より現実的な視点を提供します。

ある記録されたケースでは、16GB の RAM を搭載した古いマシンで、kitty ターミナルの10個のインスタンスが 50GB のスワップを消費していたことが判明しました。これは極端なシナリオですが、機能豊富なターミナルは、規模が拡大したときに予想外にシステムリソースを消耗させる可能性があることを浮き彫りにしています。

実証ベンチマーク:X11 vs. Wayland

メモリフットプリントを比較するために、いくつかのターミナルを Openbox (X11) と KDE (Wayland) の両方でテストしました。測定は、一連のコマンドを実行する前と後の USS (Unique Set Size) および PSS (Proportional Set Size) に焦点を当てました。

X11 メモリ使用量 (Openbox)

Terminal USS (Before) PSS (Before) USS (After) PSS (After)
st 2,592 3,008 3,396 3,834
xterm 6,808 7,414 11,640 12,266
lxterminal 6,528 9,891 7,800 11,159
gnome-terminal 10,252 14,984 10,692 15,416
alacritty 34,224 43,478 40,188 49,444
konsole 35,108 50,308 38,528 54,193
kitty 56,376 66,584 70,716 80,917
ptyxis 54,760 67,603 58,252 71,107

Wayland メモリ使用量 (KDE)

| Terminal | USS (Before) | PSS (Before) | USS (After) | PSS (After) | | :--- | :--- | :--- | :--- | :--- | | | st | 2,924 | 3,374 | 3,204 | 3,820 | | xterm | 6,460 | 6,691 | 9,888 | 10,119 | | foot | 5,096 | 7,110 | 8,764 | 11,114 | | rxvt | 8,936 | 9,440 | 12,872 | 13,736 | | lxterminal | 9,200 | 14,622 | 9,824 | 15,343 | | gnome-terminal | 12,168 | 19,005 | 12,660 | 19,313 | | alacritty | 25,468 | 28,837 | 34,188 | 37,470 | | konsole | 27,348 | 39,068 | 33,244 | 48,094 | | kitty | 46,468 | 51,520 | 53,048 | 58,032 | | ptyxis | 73,220 | 79,204 | 75,060 | 81,130 |

主要な洞察とトレードオフ

ミニマリスト:st と xterm

st (simple terminal) は一貫して他のすべてのオプションを上回り、多くの場合、最も重いターミナルの10分の1以下のメモリを使用します。しかし、ミニマリズムには代償が伴います。デフォルトでは、st にはスクロールバックバッファがありません。これが必要なユーザーには、スクロールバックや sixel サポートなどの不可欠な機能を追加するために、コミュニティパッチ(st-flexipatch など)が必要です。

xterm は、驚くほど実行可能な、低メモリのオプションとして残っています。「バロック的」で現代的な設定のしやすさやタブ機能が欠けてていると説明されることもありますが、その安定性と低オーバーヘッドにより、リソースが限られた環境や GPU サポートが不十分な環境での信頼できるフォールバックとして機能します。

多機能:kitty と Alacritty

kittyalacritty のような現代的な GPU 加速ターミナルは、優れたレンダリングと高度な機能を提供します。kitty は、特に timg を介してピクセルパーフェクトな画像をレンダリングする能力で高く評価されています。しかし、この強力な機能は、大幅に高いメモリフットプリントを伴います。

中間層:gnome-terminal と foot

gnome-terminal は、フル機能のデスクトップ環境用ターミナルであるにもかかわらず、驚くほど軽量に動作しました。同様に、foot (Wayland ネイティブ) は、timg 画像レンダリングをサポートしながら、非常に低いメモリプロファイルを維持しており、優れたバランスを提供しています。

最適化戦略

メモリを大量に消費するターミナルを使用しているが、複数のインスタンスを実行する際のオーバーヘッドを削減したい場合は、以下のアーキテクチャ上の最適化を検討してください。

  • シングルインスタンスモード: kitty は、複数のウィンドウを開く際にメモリ使用量を削減するために --single-instance フラグを提供しています。
  • Client/Server 構成: foot は、サーバー/クライアントモデルを利用しています。foot サーバー(例:systemd 経由)を起動しておくことで、footclient を使用して新しいウィンドウを開くことができ、各新しいインスタンスのメモリ圧迫を大幅に削減できます。

結論

ターミナルエミュレータの選択は、単一の指標だけで決まるものではありません。st は最も高速で軽量ですが、一部のユーザーには簡素すぎるかもしれません。foot は、パフォーマンスと画像サポートのバランスをバランスよく求める Wayland ユーザーにとって、強力な候補となります。X11 環境のユーザーには、lxterminal または gnome-terminal が、st の極端なミニマリズムと、現代的な GPU 加速ターミナルによるリソース集約的な性質の間の、堅実い中間層を提供します。

Sources