当前位置:首页 > Linux > 正文

如何看linux系统的内存使用情况

使用 free -htop 命令查看 Linux 系统实时内存

Linux系统中,了解内存使用情况是性能调优、故障排查和资源规划的核心环节,以下从核心命令解析、关键指标解读、场景化实践三个维度展开详细说明,并提供可落地的操作指南。


基础命令全解析

free命令家族

这是最经典的内存统计工具,通过free -h(人性化显示单位)可快速获取总览:
| 字段 | 说明 | 典型值示例 |
|—————|———————————————————————-|——————|
| total | 物理内存总量 | 15.6 GiB |
| used | 已被占用的内存(含缓存/缓冲区) | 8.2 GiB |
| free | 未被使用的物理内存 | 7.4 GiB |
| shared | 多个进程共享的内存区域 | 2.1 MiB |
| buff/cache | 内核用于磁盘读写加速的缓存池(重要!非”闲置”内存) | 5.8 GiB |
| available | 应用程序可直接申请的新内存(已扣除缓存预留) | 6.9 GiB |

关键认知:Linux采用”贪婪分配+惰性回收”策略,buff/cache占用高不代表浪费,反而是系统主动利用空闲内存提升I/O效率的表现,只有当available持续低于阈值时才需警惕。

/proc/meminfo深度探查

直接读取内核内存状态文件:

cat /proc/meminfo | grep -E 'MemTotal|MemFree|Cache|Buffers'

输出示例:

如何看linux系统的内存使用情况  第1张

MemTotal:       16384000 kB
MemFree:         7424000 kB
Buffers:          256000 kB
Cached:          5894400 kB
  • MemAvailable字段(新版内核):综合计算可安全分配给用户进程的内存量,比传统free更准确。
  • SwapCached:存放在交换分区中的缓存页,频繁换页会导致性能骤降。

top/htop动态监控

启动htop(需安装)后重点关注:

  • RES:进程实际使用的物理内存(不含共享库)
  • VIRT:虚拟地址空间大小(通常远大于物理内存)
  • SHR:与其他进程共享的内存(如glibc库)
  • %MEM:该进程占物理内存的比例

F6可按内存占用排序,快速定位TOP5耗内存进程。


进阶分析技巧

交换空间(Swap)健康度检测

通过swapon --show查看配置:

swapon --show
# NAME      TYPE      SIZE USED PRIO
/dev/sda2 partition 4G   0B    -2

理想状态应满足:

  • Swap使用率 < 20%(长期>50%需扩容)
  • Swap In/Out速率稳定(vmstat 1观察si/so列)

大页内存(Huge Pages)专项检查

适用于数据库等高性能场景:

cat /proc/meminfo | grep Huge
# HugePages_Total:     512
# HugePages_Free:      487
# HugePages_Rsvd:        0
# HugePages_Surp:         0
# Hugepagesize:       2048 kB

若发现HugePages_Free长期接近HugePages_Total,说明业务未充分利用大页特性。

NUMA架构下的节点分布(多路服务器必看)

使用numactl --hardware查看CPU与内存节点映射关系,配合numastat监测跨节点访问延迟。


典型场景应对策略

现象特征 可能原因 解决方案
available<总内存20% OOM杀手频繁触发 增大SWAP容量/优化应用内存泄漏
Cached突降+磁盘IO飙升 应用大量写入新数据 属正常现象,无需干预
Swap Used>80% 物理内存严重不足 升级硬件/终止非关键进程
单个进程%MEM>90% 内存泄漏或配置不当 strace跟踪系统调用

可视化工具推荐

  1. GNOME System Monitor:图形化界面适合新手,实时显示各进程内存占用曲线。
  2. nmon:IBM开发的交互式监控工具,支持按时间范围生成内存使用报告。
  3. Prometheus+Grafana:企业级方案,可定制内存使用率告警规则。

相关问答FAQs

Q1: 为什么明明看到很多free memory,系统却提示内存不够?
A: Linux的”free”不等于Windows的可用内存,当应用程序申请大块连续内存时,虽然free显示充足,但可能因碎片化无法满足需求,此时应关注available字段,它已自动扣除为保证系统稳定预留的缓存空间,可通过echo 1 > /proc/sys/vm/overcommit_memory临时允许超额分配测试。

Q2: 如何判断是否需要增加交换分区大小?
A: 监控三个指标:① swapon -s查看当前使用率;② vmstat 1观察so(换出次数)是否持续增长;③ dmesg | grep oom-killer检查是否触发过OOM,若swap使用率长期>70%且伴随明显卡顿,建议将swap设置为物理内存的1-2倍,注意SSD时代适当减小swap也可

0