You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux家庭服务器内存占用过高,求替代htop的排查工具

排查Linux内存占用的实用工具推荐

别担心,刚接触Linux遇到内存占用的困惑太正常了——Linux的内存管理逻辑和Windows不太一样,它会主动用空闲内存做缓存,所以看起来“已用内存”很高不一定是真的不够用。除了htop,这些工具能帮你更精准定位问题:

1. free:最基础的内存状态总览

这是必用的入门工具,能快速区分实际被进程占用的内存系统缓存的内存。执行:

free -h

输出里重点看这几个字段:

  • total:总物理内存
  • used:已使用内存(包含进程占用+缓存)
  • free:完全空闲的内存
  • buff/cache:系统用来缓存文件、数据的内存(这部分在需要时会自动释放给应用)
  • available:真正可供新进程使用的内存(最具参考价值的数值)

如果你的available数值还比较充足,那所谓“超半数内存占用”其实是系统在合理利用缓存,不用太担心。

2. ps:按内存排序列出进程

ps可以直接筛选出内存占用最高的进程,执行:

ps aux --sort=-%mem

输出里重点关注:

  • %MEM:进程占用内存的百分比
  • RSS:进程实际占用的物理内存(单位是KB,加-h参数可以转成人类可读格式:ps auxh --sort=-%mem
  • COMMAND:进程名称,比如Plex的进程通常是Plex Media Server,存储服务可能是smbd(Samba)之类的

3. smem:更智能的内存统计工具

这个工具会自动处理共享内存的重复统计问题(比如多个进程共享的库文件,不会被重复计算),能给出更真实的内存占用数据。先安装它(以Debian/Ubuntu为例):

sudo apt install smem

常用命令:

  • smem -t -k:查看系统总内存使用情况,包括进程、内核、缓存的占比
  • smem -p -u:按用户统计内存占用百分比
  • smem -p -t -c "name user rss":列出每个进程的名称、所属用户和实际占用内存(百分比显示)
    它还能生成可视化图表,比如smem -t -k -p --pie name生成进程内存占比的饼图(需要安装Python的matplotlib库)。

4. vmstat:监控内存与swap的交互

如果怀疑内存不足导致系统用到了swap(虚拟内存),用vmstat可以看内存换入换出的情况:

vmstat 1

每秒刷新一次,重点看:

  • si:从swap读入内存的大小(单位KB)
  • so:写入swap的内存大小
    如果这两个数值持续不为0,说明物理内存真的不够用了,系统在频繁读写swap,这时候就得考虑加内存或者优化进程了。

5. slabtop:查看内核级缓存占用

有时候内核的slab缓存(比如inode缓存、目录项缓存)也会占用不少内存,尤其是存储服务运行久了之后。执行:

slabtop

c可以按缓存大小排序,看OBJS(对象数量)和SIZE(单对象大小)列,比如dentry(目录项缓存)、inode_cache(inode缓存)如果占用过高,可能是你的存储目录里文件太多导致的。

额外小提示:理解Linux的内存逻辑

Linux的设计是“空闲内存是浪费的内存”,所以会把空闲内存用来缓存常用文件、数据,当新进程需要内存时,系统会自动释放这部分缓存。所以看内存是否真的紧张,不要只看used,重点看available或者free + buff/cache的总和。

结合你的场景,Plex运行时会缓存媒体文件,存储服务(比如Samba、NFS)也会有文件缓存,这些都是正常的内存占用,只要available足够启动虚拟机就没问题。

内容的提问来源于stack exchange,提问作者Dartrunner

火山引擎 最新活动