查看Linux服务器内存使用情况,最直接的办法是登录后执行free -h看整体用量,再用top或htop按内存排序定位具体进程;判断内存是否真的紧张,重点看available和swap换入换出,而不是只盯free那一列。 需要持续观察时,再补上vmstat、sar或云监控面板。
先认识内存口径:别被free那一列带偏
used、free、buff/cache、available分别代表什么
Linux把空闲内存尽量拿去做缓存,剩余内存少”不一定是坏事,先记住几个关键字段:
- total:物理内存总量。
- used:已使用内存,但不同工具的口径会略有差异。
- free:完全空闲、没被任何用途占用的内存。
- buff/cache:内核缓冲区和页缓存,多数情况下可回收。
- available:应用还能用到的内存估算值,包含可回收缓存。
判断业务是否还有内存余量,优先看available,不是看free。 这是Linux内存查看里最容易踩的坑。
为什么free显示内存很少但业务没报警
因为页缓存会占用空闲内存,加速文件读写,当应用需要内存时,内核会回收一部分缓存,可以运行:
free -h cat /proc/meminfo | egrep 'MemTotal|MemFree|MemAvailable|Buffers|Cached|Swap'
如果available仍然较大,buff/cache较高,通常不用急着处理,业内专家指出,Linux内存管理的设计思路就是把空闲内存充分利用起来,缓存高并不等于内存泄漏。
查看内存使用情况时swap要不要一起看
要,swap使用量本身不代表故障,关键看有没有频繁换入换出,用vmstat 1 5观察si和so两列:
si:每秒从swap读入内存的量。so:每秒从内存写入swap的量。
如果si、so长期明显大于0,说明物理内存压力较大,这时即使free看着还行,也要继续查进程。
三条命令覆盖日常查看:free、top、htop
free命令和top命令查看内存有什么区别
这是日常问得最多的对比,简单说,free看整体快照,top看实时进程和整体状态,对比表如下:
| 命令 | 主要看什么 | 适合场景 | 历史趋势 |
|---|---|---|---|
free -h |
总内存、available、swap | 快速确认整体余量 | 不支持,可用-s循环 |
top |
进程内存排序、负载、swap | 定位高内存进程 | 不支持 |
htop |
交互式进程视图 | 人工筛选、排序 | 不支持 |
vmstat |
内存、swap、CPU、IO趋势 | 判断换页压力 | 采样窗口内趋势 |
sar |
历史资源数据 | 事后排查 | 需提前安装sysstat并采集 |
/proc/meminfo |
内核内存明细 | 脚本取值、精细查看 | 快照 |
free适合先看全局。top适合接着找“谁在吃内存”。htop更直观,按F6可以选择排序字段,按F4过滤进程名。
top里怎么看进程的真实内存占用
进入top后按M,进程会按内存占用排序,重点看几列:
- RES:进程实际占用的物理内存。
- SHR:共享内存部分。
- VIRT:虚拟内存,包含申请但未必真正使用的部分。
- %MEM:占物理内存的比例。
不想进交互界面,可以直接运行:
ps aux --sort=-%mem | head -n 10
如果服务器共享内存较多,smem的PSS口径更接近真实分摊值,没有安装时,用包管理器安装smem即可。
用/proc/meminfo和vmstat补细节
/proc/meminfo是内核暴露的内存明细,脚本监控常从这里取值。vmstat 1 5适合看短时趋势,尤其关注free、buff、cache、si、so,需要历史数据时用sar -r 1 5,但前提是系统已安装sysstat并开启采集。
排查内存使用率过高:从进程、缓存、swap三条线入手
Linux服务器内存使用率过高怎么排查
按下面顺序走,基本不会乱:
- 运行
free -h,确认available还剩多少,swap用了多少。 - 运行
top并按M排序,或执行ps aux --sort=-%mem | head -n 10,找出占用最高的进程。 - 看
buff/cache是否可回收,别把缓存直接当成泄漏。 - 运行
vmstat 1 5,看si、so是否持续活跃。 - 执行
dmesg | grep -i -E 'oom|out of memory',确认有没有触发OOM。 - 对照业务日志和发布记录,判断是流量上涨、内存泄漏还是配置变化。
- 需要事后复盘时,查
sar历史数据或云监控趋势图。
常用命令组合:
free -h ps aux --sort=-%mem | head -n 10 vmstat 1 5 dmesg | grep -i -E 'oom|out of memory'
常见“假高”和“真高”的判断
| 现象 | 可能原因 | 验证方式 | 处理方向 |
|---|---|---|---|
buff/cache很高,available充足 |
缓存占用 | free -h、/proc/meminfo |
通常无需处理 |
available很低,si/so活跃 |
物理内存压力 | vmstat 1 5 |
查进程、扩容或优化 |
| 某进程RES持续上涨 | 疑似泄漏 | 多次ps或top观察 |
结合业务排查 |
| 出现OOM记录 | 内存不足触发回收 | dmesg |
调整限制或容量 |
行业共识认为,判断内存压力要结合available、swap活动和OOM记录,单看used容易误判,在北京机房或华东节点做Linux服务器内存查看时,跨地域登录的交互式top刷新可能不够稳定,sar的历史采样往往更可靠。
云服务器Linux内存监控用哪个命令好
云服务器有自带的监控面板,但登录排查仍然离不开命令行,快速看整体用free -h,定位进程用top或ps,看短时压力用vmstat,看历史趋势用sar或云监控,单机临时排查,free加top足够;多台实例、需要告警时,把云监控和node_exporter这类采集方案配合起来更省心。
持续监控与工具选择:命令行、云监控和免费工具
Linux服务器内存监控免费工具够用吗
多数情况下够用。free、top、htop、vmstat、sar、smem这些工具能覆盖单机日常查看和故障排查,免费工具的短板主要在集中告警、多机聚合和长期可视化,机器数量不多时,先用免费工具加简单脚本完全能跑起来;实例规模变大后,再考虑付费监控或自建Prometheus加Grafana。
多台服务器怎么批量看内存
临时批量查看可以用Ansible:
ansible all -m shell -a "free -h"
没有Ansible时,也可以用for循环配合ssh逐台执行,长期方案是部署node_exporter,由Prometheus采集,Grafana展示node_memory_MemAvailable_bytes、node_memory_SwapFree_bytes等指标,这样比一台台登录看top更稳定。
监控指标看哪些才算抓到重点
- MemAvailable:应用可用内存,最值得盯。
- SwapFree和si/so:判断是否频繁换页。
- OOM计数:有没有进程被内核杀掉。
- 进程RES/PSS趋势:定位持续增长的进程。
- 缓存回收情况:区分缓存占用和真实压力。
日常查看Linux服务器内存使用情况,先free -h确认全局,再top或ps定位进程,最后用vmstat、sar或云监控看趋势。内存紧不紧,看available和swap活动,比看free更靠谱。
怎么查看Linux服务器内存使用情况:常见问题解答
free显示内存快满了,需要马上重启吗?
不一定,先看available和si/so,如果available还有余量、swap没有频繁换入换出,buff/cache高通常是正常缓存,只有available很低、OOM频繁或业务明显变慢时,才需要进一步处理,重启不是第一选择。
为什么top里进程加起来没有free显示的used多?
因为used还包含内核占用、共享内存、缓存等部分,进程列表里的RES不能简单相加,共享库会被多个进程共同映射,直接相加容易重复计算,要看更细的口径,可以查/proc/meminfo或用smem看PSS。
查看Linux服务器内存使用情况时,available和free应该信哪个?
判断应用还能用多少内存,以available为准;free只表示完全空闲的内存,容易被缓存压低,所以日常排查先看available,再结合swap活动和进程占用做判断。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/786838.html


