Linux查看内存:free/top精准定位高占用
linux查看内存
在 Linux 系统中,查看内存使用情况是系统运维、性能排查和服务器管理中非常常见的操作。内存资源直接影响程序运行效率,如果内存占用过高,可能会导致系统变慢、服务响应延迟,甚至触发 OOM 机制导致进程被杀死。因此,掌握常用的内存查看命令非常重要。
一、使用 free 查看内存概览
free 是最常用的内存查看命令,可以快速显示物理内存和交换分区的使用情况。
free -h
常用参数说明:
-h:以人类可读格式显示,例如 GB、MB。-m:以 MB 为单位显示。-g:以 GB 为单位显示。-s 1:每隔 1 秒刷新一次。
示例输出中常见字段含义:
| 字段 | 含义 |
|---|---|
| total | 总内存 |
| used | 已使用内存 |
| free | 空闲内存 |
| shared | 多个进程共享的内存 |
| buff/cache | 缓存占用 |
| available | 实际可用内存 |
在 Linux 中,系统会把一部分空闲内存用作缓存,因此 free 很小不一定代表内存不足。更应关注 available 字段,它更能反映当前系统真正还能给程序使用的内存。
二、使用 /proc/meminfo 查看详细信息
/proc/meminfo 记录了系统内存的详细信息,适合需要深入分析时使用。
cat /proc/meminfo
常用关注项:
grep -E "MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree" /proc/meminfo
说明:
MemTotal:系统总内存。MemFree:完全未被使用的内存。MemAvailable:估计可用于启动新应用的内存。Buffers:块设备缓冲区占用。Cached:页缓存占用。SwapTotal:交换分区总量。SwapFree:剩余交换空间。
如果 SwapFree 持续减少,同时 MemAvailable 也很低,通常说明系统内存压力较大。
三、使用 top 查看进程内存占用
top 可以实时查看系统中各个进程的 CPU 和内存占用情况。
top
进入界面后,可以关注以下字段:
| 字段 | 含义 |
|---|---|
%MEM |
进程占用物理内存百分比 |
RES |
进程实际使用的物理内存 |
VIRT |
进程虚拟内存大小 |
SHR |
共享内存大小 |
在 top 中,可以按 M 键按照内存占用排序,方便快速找到占用内存最高的进程。
四、使用 ps 查看指定进程内存
如果只想查看某个进程或所有进程的内存占用,可以使用 ps 命令。
查看内存占用最高的前 10 个进程:
ps aux --sort=-%mem | head -n 11
查看指定进程的内存信息:
ps -p 进程ID -o pid,rss,vsz,%mem,cmd
常用字段说明:
RSS:常驻内存,表示进程实际占用的物理内存。VSZ:虚拟内存大小。%MEM:内存占用百分比。CMD:进程启动命令。
五、使用 vmstat 查看内存和交换压力
vmstat 可以查看系统整体运行状态,包括内存、交换分区、CPU 等信息。
vmstat 1
重点字段:
| 字段 | 含义 |
|---|---|
si |
每秒从 swap 读入内存的数据量 |
so |
每秒从内存写入 swap 的数据量 |
bi |
每秒从块设备读入的数据量 |
bo |
每秒写入块设备的数据量 |
us |
用户态 CPU 占用 |
sy |
内核态 CPU 占用 |
如果 si 和 so 持续较高,说明系统正在频繁使用 swap,可能存在内存不足的问题。
六、使用 pmap 查看进程内存分布
当某个进程内存占用异常时,可以使用 pmap 查看该进程的内存映射情况。
pmap -x 进程ID
如果想查看内存占用最多的映射段:
pmap -x 进程ID | sort -k3 -nr | head
这有助于分析某个程序到底占用了哪些类型的内存,例如堆内存、共享库、匿名内存等。
七、使用 smem 查看更准确的内存占用
普通命令中的 RSS 可能包含共享内存,因此多个进程会重复计算共享部分。smem 可以提供更合理的内存统计。
安装方式示例:
yum install smem
# 或
apt install smem
查看进程内存占用:
smem -r
按用户统计内存:
smem -u
常用字段:
USS:独占内存,更能反映进程真实内存成本。PSS:按比例分摊共享内存后的占用。RSS:常驻内存。
八、判断内存是否不足
查看 Linux 内存时,不要只看 free 数值。更合理的判断方式如下:
- 查看
free -h中的available。 - 查看
vmstat中si、so是否持续升高。 - 查看
/proc/meminfo中MemAvailable是否明显偏低。 - 使用
top或ps找出高内存占用进程。 - 检查是否存在内存泄漏或异常服务。
如果发现某个进程长期占用大量内存,可以进一步分析日志、重启服务或优化程序配置。
总结
Linux 查看内存的方法有很多,常用命令包括 free、cat /proc/meminfo、top、ps、vmstat、pmap 和 smem。其中,free -h 适合快速查看整体情况,/proc/meminfo 适合查看详细指标,top 和 ps 适合定位高内存占用进程,vmstat 适合判断系统是否存在 swap 压力。实际使用中,应重点关注 available、MemAvailable、si/so 和进程 RSS/USS 等指标,综合判断系统内存状态。