系统监控三板斧:top/htop/glances 从入门到专家级实战指南
一、工具全景对比与适用场景
工具 | 核心优势 | 典型场景 | 安装方式 |
---|---|---|---|
top | 系统自带/无需安装/资源占用最低 | 应急故障排查/老服务器 | apt install procps (默认预装) |
htop | 交互式操作/进程树视图/鼠标支持 | 日常监控/进程管理 | sudo apt install htop |
glances | 全维度监控/API接口/跨平台支持 | 集中监控/趋势分析 | pip install glances |
二、关键指标深度解析与故障诊断
1. 负载(Load Average) - 系统健康的晴雨表
top - 14:30:01 up 60 days, load avg: 2.8, 1.4, 0.6
-
黄金法则:
- 安全范围:
load < CPU核心数 × 0.7
- 4核服务器:
2.8 > 4×0.7=2.8
→ 临界状态
- 安全范围:
-
三级负载含义:
时间窗口 反映问题类型 诊断工具 1分钟 突发流量/进程爆炸 pidstat -u 1
5分钟 持续压力 vmstat 5
15分钟 基线负载 sar -q
2. CPU使用率分解 - 定位性能瓶颈
%Cpu(s): 15.3 us, 8.2 sy, 0.0 ni, 76.2 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
-
核心指标:
- us(user) > 60% → 应用代码优化问题
- sy(system) > 20% → 内核/驱动异常
- wa(iowait) > 5% → 磁盘性能瓶颈
-
诊断命令链:
# 定位高CPU进程 ps -eo pid,comm,%cpu --sort=-%cpu | head -10 # 分析系统调用 perf top -g -p $(pidof java)
3. 内存迷宫破解 - 理解Linux内存模型
KiB Mem : 16G total, 1.2G free, 5G used, 9.8G buff/cache
-
内存类型真相:
- buff/cache ≠ 浪费!包含文件缓存(可快速释放)
- 真实内存压力看 available 列(内核3.14+)
-
内存泄漏检测:
# 监控进程内存增长 watch -n 1 'ps -eo pid,comm,rss --sort=-rss | head -20' # 检测内存泄漏工具 valgrind --leak-check=full ./your_app
三、高手定制技巧:打造专属监控系统
1. top 企业级配置方案
创建 ~/.toprc
配置文件:
RCfile for "top with windows"
Id:a, Mode_altscr=0, Mode_irixps=1, Delay_time=2.000,
Curwin=0
Def fieldscur=AEHIOQTWKNMbcdfgjplrsuvyzX
winflags=64777, sortindx=10, maxtasks=0
summclr=6, msgsclr=2, headclr=3, taskclr=2
参数解析:
Delay_time=2
:刷新间隔2秒sortindx=10
:默认按CPU排序(10=MEM%)winflags=64777
:启用彩色/任务计数等
2. htop 高级操作手册
快捷键 | 功能 | 高级用法 |
---|---|---|
F2 | 配置界面 | 添加自定义传感器 |
F6 | 排序菜单 | 按IO速率/VIRT内存排序 |
F9 | 信号发送 | SIGRTMIN+3 实时调试信号 |
Space | 标记进程 | 批量操作标记进程 |
U | 筛选用户进程 | u root 只看root进程 |
进程树分析案例:
# 定位Java应用线程泄漏
htop -p $(pgrep java) → 按H切线程视图 → 观察线程数增长
3. glances 构建监控中枢
Web仪表板部署:
glances -w --disable-webui # 禁用内置UI
配合Grafana + InfluxDB方案:
┌──────────┐ ┌─────────┐ ┌─────────┐
│ glances │───▶│ InfluxDB│───▶│ Grafana │
└──────────┘ └─────────┘ └─────────┘
docker-compose.yml配置:
services:
glances:
image: nicolargo/glances
command: --export influxdb2 --export-influxdb2-token mytoken
environment:
- INFLUXDB2_HOST=influxdb
influxdb:
image: influxdb:2.0
grafana:
image: grafana/grafana
四、报警集成:生产环境实战方案
1. 阈值触发自动化响应
# CPU连续5分钟>80%时重启服务
glances --alert cpu:80 --alert-min 5m -x 'systemctl restart nginx'
# 内存泄漏检测:进程RSS>10GB时抓取堆快照
glances --alert-process:rss:10G:java -x 'jmap -dump:live,format=b,file=/tmp/heapdump.hprof $(pidof java)'
2. 企业级报警路由
glances --export prometheus # 输出到Prometheus
配合Alertmanager实现:
├── 邮件通知
├── 短信报警
└── 企业微信机器人
3. 容器监控特殊配置
# 监控Docker容器内部
docker run -it --pid=host --net=host nicolargo/glances
# K8s部署DaemonSet
kubectl apply -f https://glances.run/k8s-daemonset.yaml
五、扩展工具链:专业监控生态
1. 性能剖析三剑客
工具 | 监控焦点 | 使用场景 |
---|---|---|
nmon | 历史性能分析 | nmon -f -s 60 -c 1440 全天记录 |
bpftrace | 内核级追踪 | bpftrace -e 'tracepoint:syscalls:sys_enter_* { @[probe] = count(); }' |
sysdig | 安全监控 | sysdig -c topprocs_cpu container.name=web |
2. 可视化方案推荐
- 终端仪表板:
gotop
/btop++
- Web控制台:
Netdata
(实时) +Zabbix
(历史) - 云原生方案: Prometheus + Grafana + Node Exporter
3. 硬件监控进阶
# 温度传感器读取
sensors
# 输出:
asus-isa-0000
Adapter: ISA adapter
CPU: +45.0°C
GPU: +52.0°C
# 磁盘健康监控
smartctl -a /dev/sda
终极建议:当常规工具无法定位性能问题时,使用Linux
perf
工具进行火焰图分析