分析 Linux 終端機記憶體使用量:從 xterm 到 kitty

對於許多進階使用者而言,終端機是與 Linux 系統互動的主要介面。雖然我們通常關注在終端機內部運行的 shell 或工具的效能,但終端機模擬器本身的記憶體佔用卻經常被忽視。當在多個虛擬桌面中運行十幾個甚至更多的實例時,這些開銷會不斷累積,可能導致系統變得遲鈍或過度使用 swap。

本文探討了幾款熱門 Linux 終端機模擬器的記憶體使用量,並透過在不同顯示伺服器(X11 和 Wayland)上進行的實證測試,來確定哪些工具能在效率與功能之間提供最佳平衡。

記憶體危機:為什麼這很重要

記憶體使用量並不總是顯而易見的。標準工具如 tophtop 可能會產生誤導,因為它們通常報告的是常駐集大小(Resident Set Size, RSS),其中包含了共享函式庫。為了更準確地了解一個進程的獨特記憶體貢獻,像 smem 這樣的工具非常寶貴。smem 報告的是比例集大小(Proportional Set Size, PSS),它將共享記憶體分配給使用它的進程,從而提供一個更真實的視角,讓我們了解如果終止一個進程,會釋放多少記憶體。

在一個記錄在案的案例中,一名使用者發現,在一部僅有 16GB RAM 的舊機器上,十個 kitty 終端機實例消耗了 50GB 的 swap。雖然這是一個極端情況,但它突顯了功能豐富的終端機在規模擴大時,可能會出乎意料地耗盡系統資源。

實證基準測試: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) 的表現始終優於其他所有選項,其記憶體使用量通常不到最重型終端機的十分之一。然而,極簡主義是有代價的:預設情況下,st 沒有捲動緩衝區。對於需要此功能的用戶,需要使用社群補丁(例如 st-flexipatch)來增加捲動和 sixel 支援。

xterm 仍然是一個令人驚訝地可行且低記憶體的選項。雖然被描述為「巴洛克式」且缺乏現代的配置性或分頁功能,但其穩定性和低開銷使其成為資源有限或 GPU 支援不佳的環境中的可靠備選方案。

功能豐富型:kitty 與 Alacritty

現代 GPU 加速終端機如 kittyalacritty 提供卓越的渲染效能與進階功能。kitty 特別因其能透過 timg 渲染像素級精確的圖像而受到讚譽。然而,這種強大功能伴隨著顯著更高的記憶體佔用。

中間地帶:gnome-terminal 與 foot

gnome-terminal 的表現非常出色,儘管它是一個功能齊全的桌面環境終端機,但依然保持了輕量化。同樣,foot (Wayland 原生) 也提供了很好的平衡,在支援 timg 圖像渲染的同時,保持了非常低的記憶體配置。

優化策略

如果你正在使用記憶體密集型的終端機,但又想減少運行多個實例的開銷,可以考慮以下架構優化方案:

  • 單一實例模式kitty 提供 --single-instance 旗標來減少開啟多個視窗時的記憶體使用量。
  • 用戶端/伺服器架構foot 利用了伺服器/用戶端模型。透過啟動一個 foot 伺服器(例如透過 systemd),你可以使用 footclient 來啟動新視窗,從而顯著降低每個新實例的記憶體壓力。

結論

選擇終端機模擬器很少僅僅基於單一指標。雖然 st 是最快且最最輕量的,但對某些人來說可能太過簡陋。對於尋求效能與圖像支援平衡的 Wayland 用戶而言,foot 看起來是一個強大的競爭者。對於 X11 用戶,lxterminalgnome-terminal 提供了一個在 st 的極端極簡主義與現代 GPU 加速終端機的高資源消耗特性之間,穩固的中間地帶。

Sources