分析 Linux 終端機記憶體使用量:從 xterm 到 kitty
對於許多進階使用者而言,終端機是與 Linux 系統互動的主要介面。雖然我們通常關注在終端機內部運行的 shell 或工具的效能,但終端機模擬器本身的記憶體佔用卻經常被忽視。當在多個虛擬桌面中運行十幾個甚至更多的實例時,這些開銷會不斷累積,可能導致系統變得遲鈍或過度使用 swap。
本文探討了幾款熱門 Linux 終端機模擬器的記憶體使用量,並透過在不同顯示伺服器(X11 和 Wayland)上進行的實證測試,來確定哪些工具能在效率與功能之間提供最佳平衡。
記憶體危機:為什麼這很重要
記憶體使用量並不總是顯而易見的。標準工具如 top 或 htop 可能會產生誤導,因為它們通常報告的是常駐集大小(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 加速終端機如 kitty 和 alacritty 提供卓越的渲染效能與進階功能。kitty 特別因其能透過 timg 渲染像素級精確的圖像而受到讚譽。然而,這種強大功能伴隨著顯著更高的記憶體佔用。
中間地帶:gnome-terminal 與 foot
gnome-terminal 的表現非常出色,儘管它是一個功能齊全的桌面環境終端機,但依然保持了輕量化。同樣,foot (Wayland 原生) 也提供了很好的平衡,在支援 timg 圖像渲染的同時,保持了非常低的記憶體配置。
優化策略
如果你正在使用記憶體密集型的終端機,但又想減少運行多個實例的開銷,可以考慮以下架構優化方案:
- 單一實例模式:
kitty提供--single-instance旗標來減少開啟多個視窗時的記憶體使用量。 - 用戶端/伺服器架構:
foot利用了伺服器/用戶端模型。透過啟動一個foot伺服器(例如透過 systemd),你可以使用footclient來啟動新視窗,從而顯著降低每個新實例的記憶體壓力。
結論
選擇終端機模擬器很少僅僅基於單一指標。雖然 st 是最快且最最輕量的,但對某些人來說可能太過簡陋。對於尋求效能與圖像支援平衡的 Wayland 用戶而言,foot 看起來是一個強大的競爭者。對於 X11 用戶,lxterminal 或 gnome-terminal 提供了一個在 st 的極端極簡主義與現代 GPU 加速終端機的高資源消耗特性之間,穩固的中間地帶。