在Linux服务器的日常运维中,内存是引发系统故障最频繁的“重灾区”。物理内存一旦耗尽,轻则触发Swap交换导致系统卡顿,重则引发OOM Killer(内存溢出杀手)强制杀死核心进程,导致业务瞬间瘫痪。
虽然市面上有Zabbix、Prometheus等强大的监控系统,但在SSH终端里,掌握几个原生的、免费的内存检查命令,往往能让你在故障突发的第一秒精准定位问题。以下为你整理了12个经过实战检验的Linux内存检查命令,从全局概览到进程级的微观排查,一应俱全。
全局视角:看清整体内存水位
1.`free-h`(最经典的宏观概览)
free-h
这是所有人排查内存的第一步。重点关注`available`(可用内存)列,而不是`free`列。Linux会利用空闲内存做缓存(buff/cache),`available`才是真正能提供给应用使用的估算值。
2.`cat/proc/meminfo`(最详尽的内核数据)
cat/proc/meminfo|head-n 15
如果你需要最原始、最详尽的数据,这个虚拟文件包含了内核视角的所有内存分配细节,包括MemFree、Buffers、Cached、Dirty(等待写入磁盘的脏页)等。
3.`vmstat`(区分计算瓶颈与I/O瓶颈)
vmstat 1
除了`free`列看空闲内存外,重点看`si`(从Swap换入)和`so`(换出到Swap)这两列。如果这两个数值持续大于0,说明物理内存已经耗尽,系统正在靠硬盘续命。同时,`wa`(I/O等待)如果飙升,也常是内存不足导致Swap频繁读写造成的。
4.`sar-r`(历史内存趋势分析)
sar-r 1 5
属于`sysstat`包。它的强大之处在于不仅能看当下,还能看历史(`sar-r-f/var/log/sa/saXX`)。重点看`%memused`和`kbmemfree`,适合排查“昨晚半夜内存为何突然飙升”这种事后问题。
实时动态:像监控大屏一样观察
5.`top`(老牌实时监控)
top
进入后按`M`键,即可按内存占用从高到低对进程排序。观察顶部的`MiB Mem`部分,能快速看出内存是被用户态进程(`us`)吃掉的,还是被系统内核态(`sy`)消耗的。
6.`htop`(更符合直觉的现代监控)
htop
它拥有彩色的进度条,对CPU和内存的展示极其直观。你可以直接使用鼠标点击或者方向键在进程列表中查看详细的内存占比。
7.`glances`(全能型聚合看板)
glances
基于Python编写的跨平台监控工具(可能需要`pip install glances`或通过yum/apt安装)。它把CPU、内存、磁盘、网络、进程等所有信息集中在一个屏幕,甚至能高亮显示瓶颈所在。
微观定位:揪出“吃内存”的真凶
8.`ps aux--sort=-%mem`(精准排序进程)
ps aux--sort=-%mem|head-n 10
不用进入top的交互界面,直接按内存使用百分比降序排列,最占内存的10个进程一目了然。这通常是你揪出内存泄露元凶的第一步。
9.`smem`(看透共享内存的伪装)
smem-tk
传统的`ps`统计内存时,会把不同进程共享的内存重复计算。`smem`引入了PSS(按比例计算共享内存)和USS(独占内存)的概念,能非常精准地告诉你:每个应用到底实实在在占了多少物理内存。
10.`pmap`(深挖特定进程的内存分布)
pmap-x<PID>|tail-n 1
当你确定了某个可疑进程(如Java或Node.js进程),使用`pmap`加上它的PID,可以看透它的内存地址空间分布。比如堆(heap)内存是否异常大,或者加载了多少共享库。
内核与危机排查:寻找隐形的消耗与崩溃记录
11.`slabtop`(排查内核内存泄漏)
slabtop
很多时候,用户态进程内存正常,但系统总内存却很高,可能是内核对象(Slab缓存)泄露。`slabtop`会像top一样实时显示内核对象的占用情况,能发现诸如dentry、inode缓存是否失控。
12.`dmesg|grep-i oom`(案发现场还原)
dmesg-T|grep-i"out of memory"
如果网站突然报502且服务自动重启,大概率是被OOM Killer杀掉了。这条命令会调出内核日志,清晰地告诉你:在几点几分,哪个进程(通常附带进程名和PID)因为占用了过多内存被系统强制击毙。
这12个命令覆盖了从宏观到微观、从当前到历史的各个排查维度。但作为运维人员,我们不得不面对一个扎心的现实:很多时候,你查出了内存被谁吃掉,却解决不了根本问题。
如果应用的代码已经优化到了极致,但服务器因为被超售,实际可用的物理内存远低于标称值;或者遇到突发流量,内存瞬间被抽干,应用依然会因为底层资源不足而崩溃。
内存排查体现的是技术敏锐度,而选择Jtti则是为业务上了最稳固的底层保险。访问Jtti官网,查看适合高并发、内存密集型应用的高性能云服务器配置与测试IP。