信息发布→ 登录 注册 退出

在 Linux 系统中,监测内存使用情况是系统管理和故障排查的重要任务。以下是常用的内存监测工具和命令,帮助你全面了解系统内存状态,Linux内存告急?这5个命令让你秒懂系统内存状态!,Linux内存告急?这5个命令让你秒懂系统内存状态!

发布时间:2025-04-27

点击量:

基础命令

free - 内存使用概览

free -h  # 人性化显示(自动转换GB/MB单位)
free -m  # 以MB为单位精确显示
free -s 5  # 实时监控模式,每5秒刷新一次

输出字段解析

  • total:系统物理内存总量
  • used:已使用内存(包含缓存和缓冲区)
  • free:完全未被占用的内存
  • available:实际可用内存(包含可回收的缓存)
  • shared/buffers/cached:缓存和缓冲区占用的临时内存(可快速释放)

专业建议available字段比free更能反映真实可用内存,因为Linux内核会智能利用空闲内存作为磁盘缓存,这部分内存可随时回收用于新进程。

tophtop - 进程级内存监控

top        # 经典系统监控工具,按'M'键可按内存占用排序
htop       # 增强版监控工具(需通过`apt install htop`或`yum install htop`安装)

关键指标说明

  • RES(Resident Memory):进程实际占用的物理内存(常驻内存集)
  • %MEM:进程内存占用占总内存的百分比
  • VIRT:进程使用的虚拟内存总量(包含共享库、映射文件等)
  • SHR:共享内存大小(多个进程共享的内存部分)

(典型内存监控界面示意图)


专业诊断工具

vmstat - 虚拟内存统计分析

vmstat -s  # 显示详细内存统计摘要
vmstat 1 5 # 每秒采样一次,共采集5次(包含内存、交换分区、IO等核心指标)

重点关注指标

  • si(swap in):每秒从交换分区加载到内存的数据量(KB)
  • so(swap out):每秒从内存换出到交换分区的数据量(KB)
  • buff:用作缓冲区的内存量
  • cache:用作页面缓存的内存量
  • so持续大于0,表明系统正在频繁使用交换空间,可能存在内存瓶颈

smem - 高级内存报表工具

smem -u -k  # 按用户统计内存使用(KB单位)
smem -p -s swap  # 以百分比显示并按交换使用量排序
smem --pie=command -s rss  # 生成RSS内存占用饼图

pmap - 进程内存映射分析

pmap -X <PID>  # 显示指定进程的详细内存分布
pmap -x $(pgrep nginx)  # 查看nginx进程的内存使用细节

系统级监控方案

/proc/meminfo - 内核内存信息

cat /proc/meminfo | grep -e MemTotal -e MemAvailable -e SwapTotal

核心字段说明

  • MemTotal:总物理内存
  • MemFree:完全空闲内存
  • Buffers/Cached:磁盘缓存使用的内存
  • SwapCached:被换出但暂存的内存
  • Active/Inactive:活跃/非活跃内存页
  • Dirty:等待写回磁盘的内存
  • Writeback:正在写回磁盘的内存

glances - 一体化监控仪表盘

glances --disable-plugin disk,network  # 专注内存监控模式
glances --export csv --export-file memory_report.csv  # 导出内存报告

sar - 历史性能分析

# 安装sysstat工具包
sudo apt install sysstat  # Debian/Ubuntu
sudo yum install sysstat  # CentOS/RHEL
# 使用示例
sar -r 1 3  # 实时内存采样(每秒1次,共3次)
sar -r -f /var/log/sa/sa15  # 分析15号的历史数据

常见问题诊断指南

内存不足症状排查

  1. 快速诊断

    watch -n 1 "free -h; echo; vmstat 1 2 | tail -n 1"
  2. 预警信号

    • available内存持续低于总内存10%
    • swap使用率超过30%
    • si/so持续有数值波动
    • OOM killer频繁出现(检查dmesg | grep oom

内存泄漏追踪方法

  1. 长期监控

    while true; do 
      date
      ps -eo pid,user,%mem,cmd --sort=-%mem | head -n 10
      echo "-----"
      sleep 5
    done
  2. 专业工具

    • valgrind --tool=memcheck <program>(开发阶段)
    • leaktracer(运行期检测)
    • mtrace(glibc内置工具)

缓存管理建议

# 查看当前缓存策略
sysctl vm.swappiness vm.vfs_cache_pressure
# 临时调整(值越小越避免使用swap)
sudo sysctl vm.swappiness=10
sudo sysctl vm.vfs_cache_pressure=50
# 清除缓存(生产环境慎用)
sync; echo 1 > /proc/sys/vm/drop_caches  # 仅清除页缓存
sync; echo 2 > /proc/sys/vm/drop_caches  # 清除目录项和inode缓存
sync; echo 3 > /proc/sys/vm/drop_caches  # 清除所有缓存

可视化监控方案

工具特点安装命令
nmon交互式TUI界面sudo apt install nmon
Grafana+Prometheus企业级监控看板官方文档
Netdata实时Web仪表盘bash <(curl -Ss https://my-netdata.io/kickstart.sh)
Glances跨平台监控工具pip install glances

(现代化内存监控面板示例)

最佳实践建议

  1. 日常运维使用htop+glances组合监控
  2. 故障诊断时结合vmstat+smem+/proc/meminfo综合分析
  3. 长期监控推荐部署Prometheus+node_exporter+Grafana方案
  4. 开发环境使用valgrind进行内存泄漏检测
  5. 生产环境设置合理的swappiness值(建议10-30)

进阶技巧

  • 使用numastat查看NUMA内存分配情况
  • 通过slabtop监控内核slab分配器使用情况
  • 使用perf工具进行内存性能分析
  • 配置earlyoom预防系统因内存不足而卡***
标签:# 更能  # 故障诊断  # 使用量  # 实时监控  # 占总  # 综合分析  # 越小  # 重点关注  # 未被  # 并按  # 增强版  # 可按  # 数据  # 这部  # 工具包  # 多个  # 换出  # 内存不足  # 进阶  # 虚拟内存  # 让你  # 使用  # 系统  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!