1. Ubuntu性能监控工具全景图
刚接触Ubuntu系统管理时,最让我头疼的就是服务器突然变慢却找不到原因。后来才发现,用好性能监控工具就像给系统装了X光机,所有问题一目了然。Ubuntu生态中的监控工具大致可以分为三类:
命令行三剑客是最基础的利器。top命令就像汽车仪表盘,能实时显示CPU和内存占用情况。记得有次服务器卡顿,用top一看发现某个Java进程吃掉了90%内存,立马kill掉就恢复正常了。htop则是top的豪华升级版,彩色界面支持鼠标操作,按F2还能自定义显示项。vmstat特别适合排查IO瓶颈,它的输出里wa值如果长期高于5%,就说明磁盘忙不过来了。
图形化工具更适合可视化分析。Glances是我最推荐的跨平台工具,一个界面就能看遍CPU、内存、磁盘、网络等所有指标,还支持Web远程访问。安装也简单:
sudo apt install glances glances -w # 启动Web服务GNOME System Monitor是Ubuntu自带的图形工具,适合桌面用户快速查看资源占用。Cockpit则是红帽开发的Web控制台,不仅能监控还能管理容器和服务,企业级功能很全面。
企业级方案在集群监控中更高效。Nagios的报警机制特别完善,可以设置当CPU超过80%就发邮件提醒。有次凌晨3点收到报警,及时处理避免了线上事故。Prometheus+Grafana组合更适合做趋势分析,我们团队就用它生成周报,直观看到业务增长带来的资源消耗变化。
提示:选择工具时要考虑监控粒度,日常运维用htop就够了,调优时需要perf这样的专业工具
2. 命令行工具深度解析
2.1 top命令实战技巧
很多人以为top就是看个CPU占用,其实隐藏功能很多。按"1"键可以展开多核CPU详情,发现某个核心满载可能是线程没写好。Shift+M按内存排序,快速定位内存泄漏进程。我们线上曾有个PHP服务内存缓慢增长,就是靠这个发现的。
关键指标解读:
- load average:三个数分别代表1/5/15分钟的平均负载,超过CPU核数就是过载
- %CPU:注意这里统计的是所有核的占用总和,200%表示双核都用满了
- RES:进程实际占用的物理内存,比VIRT更有参考价值
常用参数组合:
top -d 5 -u www-data # 5秒刷新,只监控www-data用户进程 top -p 1234,5678 # 只监控指定PID的进程2.2 htop的高阶玩法
htop最厉害的是交互功能。F5树形视图能看清父子进程关系,曾经帮我们找到过僵尸进程的源头。F9发送信号超级实用,遇到无响应进程不用记kill命令了。空格键标记进程这个功能,在追踪特定服务时特别管用。
自定义视图技巧:
- 按F2进入设置
- 选择Display Options
- 开启"Detailed CPU time"能看到更多CPU细节
- 在Columns添加IO_READ_RATE监控磁盘读取
2.3 小众但好用的命令行工具
- iftop:实时网络流量监控,一眼看出哪个IP在疯狂下载
- iotop:监控磁盘IO,找出导致IO等待高的元凶
- nethogs:按进程统计网络流量,排查异常上传的神器
sudo apt install iftop iotop nethogs sudo iftop -nNP # 显示端口和IP而非域名 sudo iotop -o # 只显示有IO操作的进程3. 图形化工具对比评测
3.1 Glances的多面手特性
Glances最让我惊艳的是它的插件系统。通过安装额外组件可以监控Docker容器、GPU使用率等。在笔记本上测试时,发现它的温度监控比原生工具还准。分享几个实用技巧:
- 按"d"显示磁盘IO详情
- 按"m"切换内存显示单位
- 添加API_KEY后可以对接云端监控
配置邮件报警的步骤:
- 编辑/etc/glances/glances.conf
- 设置[mail]段的SMTP信息
- 设置thresholds触发阈值
3.2 Cockpit的企业级功能
虽然Cockpit占用资源稍多,但它的集成管理确实方便。通过浏览器就能完成用户管理、防火墙配置等操作,特别适合管理多台服务器。最近更新的Podman容器管理界面,比命令行操作直观多了。
启用方法:
sudo apt install cockpit sudo systemctl enable --now cockpit.socket常用功能:
- 性能图表支持时间范围选择
- 日志查看器自带过滤功能
- 终端会话支持多标签页
3.3 其他GUI工具亮点
Conky适合桌面用户,我把它配置成透明悬浮窗,随时查看硬件信息。KSysGuard的图表绘制最专业,做报告时常用它导出矢量图。Netdata的Web界面响应超快,手机访问也很流畅。
4. 企业级监控方案落地
4.1 Nagios核心配置技巧
Nagios的check_interval参数要合理设置,太频繁会增加负载,间隔太长又可能错过异常。我们团队的标准是:
- 关键服务:1分钟检查一次
- 次要服务:5分钟一次
- 硬件状态:15分钟一次
定义服务的模板示例:
define service { use generic-service host_name web-server service_description CPU Load check_command check_nrpe!check_load normal_check_interval 5 retry_check_interval 1 }4.2 Prometheus+Granfana实战
PromQL查询语言刚开始学有点难,但掌握后特别强大。比如这个查询可以找出CPU使用率前5的容器:
topk(5, sum(rate(container_cpu_usage_seconds_total[5m])) by (container_name))Grafana看板配置建议:
- 时间范围默认设为最近6小时
- 添加Thresholds阈值线
- 开启Annotations标记关键事件
4.3 混合云监控方案
对于跨云环境,我们采用Telegraf+InfluxDB+Kapacitor的组合。Telegraf的插件生态非常丰富,连Redis的慢查询都能监控。遇到过的坑是时间同步问题,所有节点必须配置NTP服务。
5. 性能问题诊断思路
5.1 典型问题排查流程
- CPU瓶颈:先用top看%us和%sy,用户态高可能是应用代码问题,内核态高可能是系统调用频繁
- 内存不足:free -h看available值,低于10%就要警惕
- IO等待:iostat -x 1重点关注%util和await值
- 网络拥堵:iftop看流量分布,netstat -s看错误统计
5.2 实用诊断脚本分享
这个脚本可以一键采集关键指标:
#!/bin/bash echo "===== $(date) =====" > system_report.txt top -bn1 | head -20 >> system_report.txt echo "\n===== Memory =====" >> system_report.txt free -h >> system_report.txt echo "\n===== Disk =====" >> system_report.txt df -h >> system_report.txt5.3 长期监控策略
- 日志轮转:配置logrotate避免日志爆盘
- 历史数据:sar默认保存一个月数据,可通过sa1/sa2调整
- 容量规划:用Grafana预测资源增长趋势
曾经用这些工具发现过一个经典案例:某服务每天下午3点CPU飙升,最后发现是定时任务没做限流。监控的价值不仅在于解决问题,更在于预防问题。