Linux 终端内存占用
摘要
作者调查了 Linux 上 `kitty` 终端的内存占用过高问题,通过基准测试比较了包括 `xterm`、`alacritty`、`gnome-terminal` 和 `konsole` 在内的多种终端的资源消耗。分析表明,与现代化的 GPU 加速替代品相比,`xterm` 和 `st` 等轻量级终端的内存占用显著更低。
暂无内容
查看缓存全文
缓存时间: 2026/05/11 21:55
# Linux 终端内存占用
来源:https://gilesorr.com/blog/linux-terminal-memory-usage.html
我*非常*频繁地使用终端。在大多数机器上,我会在一个到四个桌面上打开五到十个终端(我正在写这篇文章的机器上,两个桌面上打开了 12 个终端)。自从 1996 年开始使用 Linux 以来,我一直使用 `xterm`,因为它是基准。1998 年左右我发现了 `rxvt` 并使用了几年。我不确定后来是怎么过渡的,但大约三年前我主要使用 `lxterminal`,后来切换到了 `alacritty`,因为它大多数方面都做得很好,并且同时在 X11 和 Wayland 下都能工作(我困在这两个世界之间)。然而,不到一年前我发现了 `kitty`,它非常吸引人,因为它满足了与 `alacritty` 相同的需求,而且还支持在终端内像素级完美地渲染照片(使用 `timg` - https://github.com/hzeller/timg)……当你通过 SSH 连接到远程 Web 服务器时,这非常方便。我将大多数机器切换到了 `kitty`。
大约六周前,我注意到我的一台机器变得非常卡顿,因为它被 swap 淹没了。这是一台相对较旧的机器,配有 i7 处理器和机械硬盘……但它有 16G 内存,而我并没有做任何内存密集型的工作,比如视频编辑或运行大型数据库。这提供了一个学习机会,我发现了 `smem`(https://www.selenic.com/smem/……在 Fedora 和 Debian 仓库中也可用)。它报告进程的内存使用情况(包括 USS、PSS - `smem` 声称这是查看内存使用情况更好的方式、RSS 和 Swap)。我立即发现的是,十个 `kitty` 实例耗光了我所有的 swap。50G 的 swap。(我不知道为什么机器上有这么多 swap——可能是一些失败或遗忘的实验。)我终止了所有 `kitty` 实例,并用十个 `xterm` 实例替换了它们,之前占满的 50G swap 完全清空了。
`xterm` 并不是特别美观,但我不使用其他人可能会怀念的东西,比如标签页和菜单。我有点怀念透明度,但这不是什么大问题。我会保留 `kitty`,因为 `timg`,尽管那是一个相对罕见的使用场景。
我开始将大多数机器切换回 `alacritty`,并思考长期应该使用什么。这启发我设计了一个测试:我会同时运行我正在考虑的所有终端——更好的是,一组在 Wayland 上,一组在 X11 上——然后在每个终端中运行相同的命令集。并测量内存使用情况。
## Openbox / X11
### 运行命令之前
``
PID Command Swap 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 Command Swap 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
115381 ptyxis 0 58252 71107 148316
115005 kitty 0 70716 80917 143568
``
## KDE / Wayland
### 运行命令之前
``
PID Command Swap 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 Command Swap 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` 没有在其中一台机器上测量。控制变量做得普遍不好:终端大小不同,回滚缓冲区不同,等等。但由于上面的结果显示内存占用存在差距,最小的不到最大的十分之一,我们测量的不是细微差别。所以我不是很担心。
结果真的很有趣:
- 我没想到会找到比 `xterm` 内存占用更少的终端——但 `st` 以明显优势胜出
- 我没想到会找到比 `kitty` 更占用内存的终端(尽管如果你加上辅助应用 `kitten` 的内存占用,也许它仍然“胜出”)
- 我原以为 `gnome-terminal` 的内存占用会与 `konsole`(KDE 的默认终端)相当,但 `gnome-terminal` 在这次测试中表现优异
- 环境(Fedora 与 Debian,Wayland 与 X11)似乎根本没有造成太大影响
- 我惊讶地发现 `konsole` 支持 `timg` 的像素级图像。`timg` 是我最初切换到 `kitty` 的原因,支持像素级 `timg` 的终端列表很短。我知道的其他终端是 `foot`(仅在 Wayland 下测试,因为它在 X11 下无法工作)和 `ghostty`(未测试,因为我坚持使用 Debian 仓库中的终端)。`foot` 似乎也证明了你可以拥有合理的内存占用并支持 `timg`——很高兴知道这一点。
我想我会再多试试 `st`。并不是我的机器内存受限,但如果它满足我的其他需求,为什么不使用最省内存的终端呢?因为我通常运行十个终端,累积起来很可观。如果 `st` 不适合我,我会试试 `gnome-terminal`。
## 更新
**2026-05-08**:`st` 竟然**没有**滚动回滚功能。我现在倾向于在 X11 上使用 `lxterminal`,在 Wayland 上使用 `foot`。
我应该注明:为 X11 编译的终端在 Wayland 下运行得很好,因为有一个 X11 兼容层。反过来则不行,所以 Wayland 原生终端(如 `foot`)无法在 X11 下运行。
相似文章
发现并修复Ghostty最大的内存泄漏
一篇详细的技术文章,介绍了诊断并修复Ghostty终端仿真器中一个重大内存泄漏的过程。该泄漏是由于在非标准页面大小下滚动缓冲区修剪逻辑错误导致的。修复已合并,将包含在即将发布的1.3版本中。
Ratty: A terminal emulator with inline 3D graphics
# Ratty — A GPU-rendered terminal emulator with inline 3D graphics 🐀🧀 Source: [https://ratty-term.org/](https://ratty-term.org/) © 2026 Ratty,[Orhun Parmaksız](https://github.com/orhun)
人生苦短,别用慢终端
本文详细介绍了通过避免框架、缓存补全以及懒加载工具来加速终端启动的实用技巧,实现了30毫秒的shell启动。
Linux延迟测量与合成器调优
一项详细调查,使用基于Teensy的LDAT工具测量游戏中的Linux延迟,在KDE Wayland下的Nvidia GPU上使用各种设置测量点击到光子延迟,并与Windows进行比较。
Otty
Otty 是一款 macOS 原生终端模拟器,兼具原生性能与精美设计。