很多刚接触Linux系统的朋友,在管理服务器时最常遇到的一个问题就是:不知道怎么看自己这台机器内存用了多少、还剩多少。尤其是CentOS系统,虽然比Windows看起来复杂,但查看内存这件事其实非常简单。只要掌握了几个关键命令,你就能随时掌握服务器的内存状态,不管是排查性能问题还是日常运维,都能游刃有余。
用free命令一眼看清内存总量和已用量
free命令是Linux系统下查看内存最基础、最直接的工具。你只要在终端输入free -m,系统就会以兆字节为单位显示内存的使用情况。这个命令的输出会分为两行,第一行是物理内存,第二行是交换分区。对于绝大多数场景来说,看第一行就够了。

物理内存那一行里,有两个数字特别重要:total和available。total代表你的服务器总共有多少内存,比如显示1990,那差不多就是2GB。available则是当前还能用的内存,这个数字比单纯的“空闲内存”更准确,因为它会把缓存和缓冲区也算进去。你可能会发现,有时候系统显示used很高,但available还是不少,这说明内存被缓存占用了,并不是真的“内存不足”。
还有个老一点的用法是free -h,这个参数会让系统自动选择一个合适的单位显示,比如GB、MB,看起来更人性化。如果你在做脚本监控,建议用free -b以字节为单位输出,方便程序处理。但日常查看,free -h就足够了。
用top命令实时监控内存占用最高的进程
只看总内存是不够的,有时候你发现系统变慢,内存飙升,这时候就得找出到底是哪个程序在吃内存。top命令就是干这个活儿的。输入top之后,你会看到一个实时刷新的进程列表,默认按照CPU占用率排序。想按内存排序,按下大写字母M键,瞬间就能把内存占用最高的进程排到最前面。

在top界面的最上面几行,会显示系统整体情况。比如内存那一行会写“Mem: 1990.1 total, 1800.2 used, 189.9 free, 400.5 buffers/cache”。这个buffers/cache就是之前说的缓存,很多新手看到used很高就慌了linux认证,其实缓存是为了加速磁盘读写,当别的程序需要内存时,系统会自动释放掉。
如果你想退出top,按q键就行。top命令还有一个好兄弟叫htop,不过CentOS默认没装,需要自己装。htop显示更漂亮,还支持鼠标操作,但基础功能top都能做。如果只是想看谁在吃内存,top就已经很够用了。
用/proc/meminfo文件读取最详细的内存信息
有些人可能不习惯用命令,或者需要更精确的数据来做分析。这时候可以直接读系统文件/proc/meminfo。输入cat /proc/meminfo,你会看到一长串详细的内存参数。这里面不光有总内存、空闲内存,还有Active、Inactive、Dirty、Writeback这些更细的分类。

如果你是运维人员,写监控脚本的时候,从/proc/meminfo里提取数据是最稳定的做法。因为这个文件是内核实时生成的,不会因为不同版本的系统而有格式变化。比如你想获取总内存,直接grep “MemTotal” /proc/meminfo就行,返回的数字单位是千字节。
这个文件里有个参数叫MemAvailable中标麒麟linux,值得重点关注。它才是真正可用的内存总量,比“空闲内存”更有参考价值。很多时候你看used很高,但系统并不卡,就是因为大量内存被缓存了,而MemAvailable仍然充足。判断内存是否够用,看MemAvailable比看used靠谱得多。
用vmstat命令查看内存变化趋势和瓶颈
如果你想了解内存使用的变化趋势,而不是只看一个瞬间的快照,vmstat命令非常好用。输入vmstat 1 5,系统会每隔一秒输出一次内存信息,一共输出五次。这样你就能看到内存使用量是稳定的还是在增长。输出的第六列是swapdcentos查看本机内存,代表交换分区的使用情况。如果这一列频繁变化,说明物理内存可能已经不够用了centos查看本机内存,系统在频繁换页,这时候性能会明显下降。

vmstat还会显示si和so两列,分别代表从磁盘交换到内存和从内存交换到磁盘的数据量。这两个数字如果一直不为零,说明内存压力很大,是时候考虑加内存或者优化程序了。对于生产环境来说,内存用到90%以上不一定有问题,但一旦开始大量使用交换分区,系统响应时间就会大幅增加。
很多老手在排查性能问题时,喜欢先跑一个vmstat看一眼,因为它的输出很紧凑,一行里就能看到内存、CPU、IO等关键指标,比top更清爽。配合free命令一起用,基本能覆盖90%的内存排查场景。
用smem命令更准确统计进程真实内存占用
有时候你会发现,用top看某个进程的内存占用,跟用ps看的结果不一样。这是因为不同命令对“内存占用”的定义不同。top显示的是RES(常驻内存),ps显示的是RSS,这些数字都包含共享库。如果多个进程共用同一个共享库,每个进程的RSS都会把这个库的大小算进去,导致总内存被重复统计。

smem命令就是为了解决这个问题而生的。不过CentOS默认没有安装,需要先装一下。装好之后输入smem,它会按照USS(专有内存)来排序,这个数字才是进程独享的内存,不包含共享部分。对于定位哪个程序真正吃内存,smem比top更准确。
如果你发现某个进程的USS很高,而RES也很高,基本就可以确定这个进程是内存大户。如果USS不高但RES很高,那可能是共享库的情况,不用太担心。生产环境里,我一般先用free看总量,用top找嫌疑进程,最后用smem确认具体的内存消耗。这三板斧下来,内存问题基本无处遁形。
CentOS查看内存其实并不复杂,关键要理解每个命令输出的含义。free告诉你总量,top告诉你谁在用,vmstat告诉你趋势,smem告诉你真实消耗。日常使用中,只要记住这几个命令,再结合你的实际业务场景,就能轻松掌握服务器的内存状况。遇到内存告警时,先别急着加配置,用这些命令查一查,很多时候只是某个进程出现内存泄漏,重启一下服务就能解决。
