深夜两点,手机突然响起——网站502了。连上SSH看到满屏的进程挤爆CPU,是该无脑执行kill -9
还是冷静分析?对于Linux系统管理员来说,选择合适的性能监控工具就像急诊科医生选择诊疗设备。本文将通过大量真实场景演示,带你快速掌握六大监控神器的使用精髓。
1. 老祖宗工具top:依然能打的性能仪表盘
1.1 基础应用场景演示
# 查看所有进程的综合信息(技术栈:Bash)
$ top -b -n 1 | head -n 20
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1328 mysql 20 0 22.3g 4.2g 28384 S 89.9 13.4 315:26.34 mysqld
2884 root 20 0 162076 2176 1548 R 6.2 0.0 0:00.02 top
注释说明:
-b
参数启用批处理模式适合脚本抓取head -n 20
截取最重要的前20行- RES列显示的是物理内存占用(单位KB)
1.2 实战妙用技巧
在交互界面中按这些键组合:
Shift+H
:切换线程/进程显示模式Shift+W
:保存当前字段排序配置c
:切换完整命令行显示
典型场景:凌晨3点发现Java进程突然内存泄漏,使用top -p 进程PID
实时监控RES增长情况,每隔5秒记录一次到日志文件。
2. htop:给监控装上台显仪表
2.1 三维视图体验
# 安装后首次启动(技术栈:Bash)
$ sudo apt install htop
$ htop -d 10 -u nginx
1 [||| 12.3%] Tasks: 87, 34 thr; 2 running
2 [ 0.0%] Load average: 1.01 0.98 0.89
Mem[|||||||||||||| 2.1G/3.9G] Uptime: 15 days, 03:12:11
注释说明:
-d 10
设置刷新间隔为10秒-u nginx
过滤显示nginx用户的进程- 颜色区分进程状态(红色:僵尸进程)
2.2 为什么开发都爱它?
试过这组操作流程你就明白了:
F4
输入java
过滤关键进程F6
选择PERCENT_CPU排序Space
标记可疑进程后批量终止
对比优势:在MySQL主从同步异常时,能用鼠标点击直接查看进程的完整环境变量。
3. glances:监控界的瑞士军刀
3.1 一站式监控方案
# 启用Web服务模式(技术栈:Bash)
$ glances -w -t 30 --disable-plugin docker
Glances web server started on http://0.0.0.0:61208/
# 浏览器访问显示的监控面板包含:
[CPU 78%] [MEM 92%] [SWAP 5%]
[NET eth0: ↑1.2G ↓589M]
[DISK sda1: 85%]
注释说明:
-t 30
设置页面30秒自动刷新--disable-plugin
隐藏不需要的模块- 红色高亮显示超过阈值(默认CPU>80%,内存>90%)
3.2 企业级应用案例
在Kubernetes集群中部署的技巧:
- 编写DaemonSet部署glances
- 配置Prometheus抓取/export接口
- Grafana导入官方模板实现可视化
4. vmstat:洞悉系统维度的脉动
4.1 查看资源竞争实况
# 每2秒采集一次连续5组(技术栈:Bash)
$ vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 184320 92412 33548 692108 0 0 35 12 109 256 23 9 68 0 0
1 0 184320 91204 33552 692304 0 0 0 284 1156 3895 31 12 57 0 0
字段解密:
r
列:运行队列长度 > CPU核数说明过载cs
列:上下文切换激增预示锁竞争wa
列:IO等待时间超过30%需警惕
4.2 生产环境诊断实例
某电商大促时出现周期性卡顿,通过这个操作锁定问题:
$ vmstat 1 60 > /tmp/vm.log
# 分析发现每小时整点时wa飙升到95%
# 最终定位到日志切割脚本的sync操作
5. 关联技术生态整合
5.1 监控数据持久化方案
将htop输出导入ELK栈:
# 日志处理脚本示例(技术栈:Python3)
import subprocess
import json
def get_htop_stats():
cmd = "htop --batch --tree -C"
output = subprocess.check_output(cmd.split()).decode()
# 解析进程树为JSON结构
return process_data(output)
if __name__ == "__main__":
data = get_htop_stats()
with open("/var/log/htop.json", "a") as f:
f.write(json.dumps(data)+"\n")
5.2 容器监控的特殊考量
在Docker环境中建议:
- 使用
docker stats
查看容器实时状态 - 为每个容器启动独立的glances进程
- 避免在容器内安装监控工具
6. 技术选型雷达(五维对比)
通过六个核心维度评估工具:
评估维度 | top | htop | glances | vmstat |
---|---|---|---|---|
实时性 | ★★★★ | ★★★★ | ★★★ | ★★★★ |
数据维度 | ★★ | ★★★ | ★★★★ | ★★★ |
可定制性 | ★★ | ★★★★ | ★★★ | ★ |
资源占用 | ★★★★ | ★★★ | ★★ | ★★★★ |
学习曲线 | ★★ | ★★★ | ★★ | ★★★★ |
报警能力 | ✕ | ✕ | ★★★ | ✕ |
7. 常见踩坑记录薄
- top显示异常问题:当
%CPU
超过100%时,可能是多核累计值(解决方法:按1
查看单核详情) - htop卡顿现象:300+进程时建议使用
-u
过滤(案例:某平台因显示3000+僵尸进程导致SSH卡死) - vmstat数值跳变:采样间隔小于5秒时数据可能失真(生产环境建议最小间隔2秒)
- glances端口冲突:Web模式默认使用61208端口(解决方法:添加
--port
参数)
8. 全文精要总结
在经历十几个深夜故障排查后,笔者总结出这套工具选择法则:
- 临场应急选htop:直观的色块告警和鼠标支持快速响应
- 定时巡检用glances:Web页面和API输出适合自动化集成
- 深度分析靠vmstat:历史数据对比发现隐藏问题
- 老服务器别忘top:在嵌入式设备等低配环境依然可靠
当掌握了这套工具组合拳,面对突发的性能问题你就能像老中医把脉般从容——望(htop整体查看)、闻(glances趋势分析)、问(vmstat参数验证)、切(top精准定位)一气呵成。