深夜两点,手机突然响起——网站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 为什么开发都爱它?

试过这组操作流程你就明白了:

  1. F4输入java过滤关键进程
  2. F6选择PERCENT_CPU排序
  3. 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集群中部署的技巧:

  1. 编写DaemonSet部署glances
  2. 配置Prometheus抓取/export接口
  3. 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. 常见踩坑记录薄

  1. top显示异常问题:当%CPU超过100%时,可能是多核累计值(解决方法:按1查看单核详情)
  2. htop卡顿现象:300+进程时建议使用-u过滤(案例:某平台因显示3000+僵尸进程导致SSH卡死)
  3. vmstat数值跳变:采样间隔小于5秒时数据可能失真(生产环境建议最小间隔2秒)
  4. glances端口冲突:Web模式默认使用61208端口(解决方法:添加--port参数)

8. 全文精要总结

在经历十几个深夜故障排查后,笔者总结出这套工具选择法则:

  1. 临场应急选htop:直观的色块告警和鼠标支持快速响应
  2. 定时巡检用glances:Web页面和API输出适合自动化集成
  3. 深度分析靠vmstat:历史数据对比发现隐藏问题
  4. 老服务器别忘top:在嵌入式设备等低配环境依然可靠

当掌握了这套工具组合拳,面对突发的性能问题你就能像老中医把脉般从容——望(htop整体查看)、闻(glances趋势分析)、问(vmstat参数验证)、切(top精准定位)一气呵成。