Ubuntu 下利用atop实现系统性能监控与优化

张开发
2026/6/5 0:24:22 15 分钟阅读
Ubuntu 下利用atop实现系统性能监控与优化
1. 为什么选择atop监控Ubuntu系统性能第一次接触系统监控工具时你可能和我一样困惑top、htop、nmon这些工具已经很好用了为什么还要学atop我在管理服务器集群时发现当系统出现性能瓶颈后传统工具往往只能告诉我现在的情况而atop的强大之处在于它能记录历史数据就像给系统装了个黑匣子。atop每隔固定时间默认10分钟就会对系统做一次全面体检记录包括CPU、内存、磁盘、网络等所有关键指标。上周我们有个服务器突然CPU飙高用top查看时已经恢复正常但通过atop的历史日志很快定位到是一个定时脚本在凌晨3点占用了全部核心。这种事后诊断能力在排查偶发性能问题时特别有用。相比其他监控工具atop还有三个独特优势进程级精细监控不仅能看系统整体负载还能追踪每个进程的资源占用变化磁盘活动可视化直接显示哪个进程在疯狂读写磁盘这对排查IO瓶颈太重要了网络流量关联配合netatop模块能把网络流量对应到具体进程2. 从安装到配置的全流程指南2.1 基础安装与内核模块在Ubuntu上安装atop简单到只需要两行命令sudo apt update sudo apt install atop但如果你想监控网络流量强烈建议还需要安装netatop模块。这里有个小坑新版的Ubuntu可能缺少内核头文件需要先准备编译环境sudo apt install zlib1g-dev linux-headers-$(uname -r) wget https://www.atoptool.nl/download/netatop-3.1.tar.gz tar -zxvf netatop-3.1.tar.gz cd netatop-3.1 make sudo make install安装完成后用这个命令检查模块是否加载成功lsmod | grep netatop如果没输出可能需要手动加载sudo modprobe netatop2.2 优化日志配置策略默认配置的atop有两个问题采样间隔太长10分钟日志保留太久28天。对于需要精细监控的场景我推荐这样修改/etc/default/atop文件LOGOPTS-w /var/log/atop/atop_$(date \%Y\%m\%d) LOGINTERVAL30 LOGGENERATIONS3这里解释下关键参数LOGOPTS使用-w参数按天分割日志避免单个文件过大LOGINTERVAL从600秒改为30秒采样能捕捉到突发性性能波动LOGGENERATIONS日志保留天数从28天改为3天根据磁盘空间调整配置完成后别忘记重启服务sudo systemctl restart atop3. 读懂atop数据的关键技巧3.1 系统资源总览解读打开日志文件后你会看到满屏的数据。别慌我们先看顶部几行关键指标atop -r /var/log/atop/atop_20240315PRC行进程概况#trun 2只有2个进程在运行状态#tslpi 158158个进程在可中断睡眠等IO#zombie 1有个僵尸进程需要清理CPU行多核汇总sys 15%内核态占用15%CPUuser 65%用户程序占用65%wait 18%CPU在等磁盘IO这个值长期10%就要警惕MEM行内存使用cache 3.2G别被吓到Linux会尽量利用内存做缓存free 512M真正空闲内存如果持续低于100M要考虑优化3.2 进程级性能分析按m键按内存排序你会发现某些进程的内存占用会不断增长——这就是典型的内存泄漏迹象。上周我就用这个方法找到一个Python服务的内存泄漏问题。按d键显示磁盘IO排名时注意这两列DSK sda busy 92%磁盘已经不堪重负RD 450K某个进程在疯狂读取可能是SQL全表扫描4. 实战性能问题排查案例4.1 CPU占用飙升分析某次收到报警显示服务器CPU使用率100%登录后用atop查看历史记录atop -r /var/log/atop/atop_20240314 -b 14:30通过时间跳转命令t和T定位到问题发生时的记录PRC行显示user 95%用户态CPU几乎耗尽按a排序发现有个python3进程占用380%CPU4核机器按c显示完整命令发现是某个数据分析脚本在跑全量计算解决方案为该脚本添加执行频率限制并改用增量计算方式。4.2 磁盘IO瓶颈定位有用户反映数据库查询变慢但CPU和内存都正常。用atop排查步骤打开日志后按d键发现DSK vdb busy 99%持续了20分钟查看对应时间段的DSK行发现write 1200异常高结合进程视图定位到是备份程序在写入大量临时文件最终通过调整备份策略改为低峰期执行问题解决。5. 高级技巧与自动化监控5.1 自动化报警设置虽然atop本身没有报警功能但可以结合其他工具实现。这是我的方案用crontab定期解析最新日志*/5 * * * * atop -r $(ls -t /var/log/atop/atop_* | head -1) -P CPU | grep user 90 sendalert.sh关键指标触发条件CPU user% 90%持续5分钟内存free 100MB磁盘busy 95%5.2 长期趋势分析atop日志可以用atopsar转换成CSV格式方便用Excel或Python分析atopsar -r /var/log/atop/atop_20240301 -b 09:00 -e 18:00 -CPU cpu.csv通过这种分析我发现每周五下午3点CPU负载都会升高原来是周报生成任务集中执行导致。后来做了任务分流系统稳定性明显提升。6. 避坑指南与最佳实践日志磁盘空间监控曾经因为没设置LOGGENERATIONS导致/var分区被撑满。现在我会在atop配置的同目录放个监控脚本#!/bin/bash du -sh /var/log/atop | awk {if($1 2G) system(sudo systemctl stop atop)}生产环境采样间隔不要设置LOGINTERVAL小于10秒否则会显著增加系统负载产生大量日志数据可能影响高性能应用的运行容器环境注意事项在Docker/K8s环境中需要额外配置--cap-add SYS_ADMIN --device /dev/sda1否则可能无法获取准确的磁盘和网络数据

更多文章