Linux系统资源监控实战:从命令行到可视化工具全面解析
2026/4/18 13:21:15 网站建设 项目流程

1. Linux系统资源监控入门指南

刚接触Linux系统监控时,我经常被各种命令和参数搞得晕头转向。直到有次服务器突然卡死,手忙脚乱查不出原因,才意识到系统监控的重要性。Linux系统监控就像汽车的仪表盘,能实时反映CPU、内存等关键指标的状态。

最基础的监控命令非psfree莫属。ps命令就像进程显微镜,能查看每个程序的运行状态。记得有次发现Python服务异常,用ps aux | grep python快速锁定了内存泄漏的进程。而free命令则是内存体检报告,free -h能以人类可读格式显示内存使用情况,特别适合快速排查内存不足问题。

初学者常困惑于free命令输出的buffers和cached区别。简单来说,buffers是磁盘读写缓冲区,cached是文件缓存。当应用需要内存时,这些缓存会被自动释放,所以查看可用内存时要重点关注available字段。有次客户投诉服务变慢,我通过watch -n 1 free -h发现available内存持续下降,最终定位到是日志服务配置错误导致的内存溢出。

2. 命令行监控工具深度解析

2.1 ps命令的进阶用法

很多人以为ps只能查看进程列表,其实它暗藏玄机。通过组合排序和awk,可以变身性能分析利器。我常用这三个黄金命令:

# CPU占用Top10 ps aux --sort=-%cpu | head -n 11 # 内存占用Top10 ps aux --sort=-%mem | head -n 11 # 统计Java进程总内存 ps -C java -o rss= | awk '{sum+=$1} END {print sum/1024"MB"}'

最近排查线上问题时,发现用ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem能同时显示父子进程关系,意外发现某个子进程内存泄漏拖垮了整个服务。ps的-L参数还能查看线程信息,对排查多线程应用特别有用。

2.2 free命令的隐藏技能

free命令的-s参数可以定时刷新,配合watch命令更强大:

# 每2秒刷新,高亮变化值 watch -n 2 -d free -h

有次性能调优时,我通过free -w发现buffers异常高,原来是某服务频繁写临时文件导致的。-t参数可以显示总计行,-s 5表示5秒刷新一次。建议将alias mem='free -hwt -s 3'加入bashrc,建立自己的监控快捷命令。

3. 可视化监控工具实战

3.1 htop:终端里的控制中心

第一次用htop时,那彩色界面和鼠标支持让我惊艳。在CentOS上安装很简单:

yum install epel-release yum install htop

它的 killer feature 是交互式操作:

  • F2进入设置界面,可以自定义显示列
  • F3搜索进程,F4过滤进程
  • F5树形展示,看清父子进程关系
  • Space标记多个进程批量操作

有次服务器CPU飙高,我用htop的Shift+H显示线程,发现是某个Java线程死循环。还喜欢它的F9杀进程功能,不用再记PID号。建议把-d 10参数设为默认,降低刷新频率节省资源。

3.2 nmon:全能型监控神器

nmon的独特之处在于能同时监控CPU、内存、磁盘、网络:

nmon -f -s 30 -c 120 -t

这个命令会每30秒采集一次,共采集120次,-t包含详细进程信息,-f输出到文件。生成的.nmon文件可以用nmon_analyzer生成Excel图表。

在分析性能基线时,我常用nmon -s 300 -c 288 -f做24小时监控(300秒×288次)。它的磁盘统计特别详细,能看出是读密集还是写密集型负载。

4. 高级监控技巧与实战案例

4.1 /proc文件系统探秘

/proc是宝库,我经常用这些命令:

# 核心指标速查 cat /proc/meminfo | grep -E 'MemTotal|MemFree|Buffers|Cached' # 进程级内存详情 cat /proc/[pid]/status | grep -i vm # slab分配器情况 cat /proc/slabinfo

曾经遇到服务器内存耗尽但free显示可用内存充足的怪事,最后在/proc/meminfo发现Slab占用20GB,原来是内核模块内存泄漏。/proc/[pid]/smaps更能显示进程内存的详细分布。

4.2 监控脚本编写实战

把常用命令封装成脚本能提升效率。这是我的内存监控脚本模板:

#!/bin/bash LOG=/var/log/memwatch.log while true; do date >> $LOG free -m >> $LOG ps aux --sort=-%mem | head -n 6 >> $LOG echo "-----" >> $LOG sleep 60 done

更专业的做法是用collectd+Grafana搭建监控系统。有次用这个组合发现了内存使用的周期性波动,最终定位到是定时任务加载大文件导致的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询