linux atop命令
atop命令 是一个功能强大的交互式系统监控工具,可以实时监控系统资源使用情况和进程活动。与top命令相比,atop提供更详细的信息、历史数据记录和回放功能,是系统性能分析和故障排查的专业工具。
命令格式
# 实时监控模式
atop [选项] [间隔时间] [次数]
# 查看历史数据
atop -r [日志文件] [开始时间] [结束时间]
# 生成报告
atop -w [输出文件] [间隔时间] [次数]
常用选项
| 选项 |
说明 |
-a |
显示所有进程(包括非活动进程) |
-c |
按CPU使用率排序(默认) |
-m |
按内存使用率排序 |
-d |
按磁盘使用率排序 |
-n |
按网络使用率排序 |
-s |
按系统资源排序 |
-v |
显示进程详细信息 |
-r 文件 |
读取历史数据文件 |
-w 文件 |
将数据写入二进制文件 |
-l |
显示滚动日志(跟随模式) |
-P 资源 |
按指定资源筛选进程(cpu,mem,dsks,net) |
-g |
显示进程组信息 |
-A |
显示所有信息(等价于-v) |
-b 时间 |
从指定时间开始(格式:YYYYMMDDhhmm) |
-e 时间 |
到指定时间结束(格式:YYYYMMDDhhmm) |
interval |
采样间隔(秒) |
count |
采样次数 |
输出界面说明
- 顶部统计区:系统整体资源使用情况
- 进程列表区:按资源使用排序的进程列表
- 颜色标识:
红色 - 资源使用过高
黄色 - 资源使用警告
绿色 - 资源使用正常
- 快捷键:
h 帮助,q 退出,c CPU排序,m 内存排序
输出字段说明
顶部统计区字段
| 字段 |
说明 |
| PRC |
进程统计(总进程数、运行/睡眠进程数) |
| CPU |
CPU使用率(用户、系统、空闲、等待等) |
| CPL |
CPU负载(1、5、15分钟平均负载) |
| MEM |
内存使用(总内存、已用、缓存、缓冲区等) |
| SWP |
交换分区使用情况 |
| PAG |
页面交换活动 |
| PSI |
压力失速信息(CPU、内存、IO压力) |
| LVM/MDD/DSK |
逻辑卷/磁盘/分区活动 |
| NET |
网络接口统计 |
进程列表区字段
| 字段 |
说明 |
| PID |
进程ID |
| SYSC |
系统调用次数 |
| USER |
进程所有者 |
| THR |
线程数 |
| S |
进程状态(R运行,S睡眠,D不可中断睡眠) |
| CPU% |
CPU使用率 |
| MEM% |
内存使用率 |
| VGROW |
虚拟内存增长 |
| RGROW |
驻留内存增长 |
| RDDSK |
磁盘读取 |
| WRDSK |
磁盘写入 |
| RUID |
真实用户ID |
| EUID |
有效用户ID |
| ST |
进程启动时间 |
| NAME/CMD |
进程名/命令行 |
使用实例
1. 基本实时监控(类似top)
2. 指定采样间隔和次数
# 每2秒采样一次,共采样10次
atop 2 10
3. 按内存使用排序
4. 按磁盘活动排序
5. 按网络活动排序
6. 显示所有进程(包括不活动的)
7. 显示详细信息
8. 读取历史数据文件
# 读取默认位置的历史数据
atop -r /var/log/atop/atop_20230101
# 读取指定日期的数据
atop -r /var/log/atop/atop_$(date +%Y%m%d)
# 读取并跟随最新数据
atop -l -r /var/log/atop/atop_20230101
9. 将监控数据写入文件
# 将数据保存到二进制文件
atop -w /tmp/atop_data 2 30
# 压缩保存(节省空间)
atop -w /tmp/atop_data.gz 5 100
10. 查看特定时间段的历史数据
# 查看2023年1月1日10:30到11:00的数据
atop -r /var/log/atop/atop_20230101 -b 1030 -e 1100
11. 筛选特定资源类型的进程
# 只显示CPU消耗高的进程
atop -P cpu
# 只显示内存消耗高的进程
atop -P mem
# 只显示磁盘活动多的进程
atop -P dsks
# 只显示网络活动多的进程
atop -P net
12. 生成文本报告
# 生成一次性报告
atop 1 1 > /tmp/atop_report.txt
# 生成详细报告
atop -v 5 3 > /tmp/detailed_report.txt
13. 监控特定进程
# 使用过滤器监控nginx进程
atop | grep nginx
# 或者使用进程名筛选
atop -c | grep -A5 -B5 "nginx"
实际输出示例
示例1:基本输出
ATOP - hostname 2023/01/01 10:30:00 ------ 10s elapsed
PRC | sys 0.38s | user 1.25s | #proc 256 | #zombie 0 | #exit 0 |
CPU | sys 12% | user 38% | irq 0% | idle 50% | wait 0% |
CPL | avg1 1.25 | avg5 1.10 | avg15 0.95 | csw 12345 | intr 5678 |
MEM | tot 16.0G | free 4.0G | cache 6.0G | buff 1.0G | slab 0.5G |
SWP | tot 2.0G | free 1.5G | | vmcom 8.0G | vmlim 10.0G |
NET | transport | tcpi 123 | tcpo 456 | udpi 78 | udpo 90 |
NET | network | ipi 234 | ipo 567 | ipfrw 0 | deliv 234 |
DSK | sda | busy 5% | read 123 | write 456 | avio 0.5ms |
示例2:进程列表
PID SYSC USER THR S CPU% MEM% VGROW RGROW RDDSK WRDSK RUID EUID ST NAME/CMD
12345 1234 root 12 R 25.0 2.5 120K 80K 123 456 root root 10:15 nginx
23456 2345 mysql 8 S 15.0 20.0 500K 300K 45 67 mysql mysql 09:30 mysqld
34567 890 www-data 20 S 5.0 3.0 50K 30K 12 23 www- www- 10:00 php-fpm
示例3:磁盘统计详情
DSK | sda | busy 15% | read 1024 | write 2048 | avio 1.2ms |
DSK | sdb | busy 5% | read 512 | write 1024 | avio 0.8ms |
LVM | vg00 | busy 20% | read 1536 | write 3072 | avio 1.5ms |
交互式快捷键
- c - 按CPU使用率排序
- m - 按内存使用率排序
- d - 按磁盘活动排序
- n - 按网络活动排序
- a - 按进程年龄排序
- t - 按线程数排序
- g - 显示通用输出
- v - 显示详细信息
- u - 显示指定用户进程
- p - 显示指定PID进程
- f - 添加/删除显示字段
- l - 限制显示行数
- t - 切换到下一个采样
- T - 切换到上一个采样
- b - 跳到指定时间
- r - 反向播放模式
- Space - 暂停/继续播放
- h - 显示帮助
- q - 退出atop
- 1 - 单CPU模式
- 2 - 每CPU详细模式
- Enter - 刷新显示
实用场景
- 系统瓶颈定位
- 资源使用趋势分析
- 进程性能调优
- 容量规划支持
- 系统卡顿原因分析
- 内存泄漏检测
- CPU峰值问题调查
- 磁盘IO瓶颈诊断
- 异常进程检测
- 资源滥用监控
- 用户活动审计
- 入侵行为分析
- 系统使用报告
- 资源利用率统计
- 性能基准测试
- SLA合规验证
实用命令组合
# 监控特定时间段的系统活动
atop -r /var/log/atop/atop_20230101 -b 0900 -e 1700
# 生成每日性能报告
atop -r /var/log/atop/atop_$(date +%Y%m%d) > /var/log/daily_report.txt
# 查找内存泄漏进程
atop -P mem | grep -E "MEM%|VGROW.*[0-9]+M"
# 监控磁盘IO最高的进程
atop -d -P dsks | head -20
# 分析CPU使用模式
atop -c -b 0900 -e 1800 -r /var/log/atop/atop_20230101 | grep -E "CPU%|^[0-9]+:"
# 自动化监控脚本
#!/bin/bash
LOG_DIR="/var/log/atop_reports"
DATE=$(date +%Y%m%d_%H%M%S)
# 采集5分钟的数据,每10秒一次
atop -w $LOG_DIR/report_$DATE.raw 10 30
# 转换为文本格式
atop -r $LOG_DIR/report_$DATE.raw > $LOG_DIR/report_$DATE.txt
echo "报告已生成: $LOG_DIR/report_$DATE.txt"
配置atop日志记录
# atop配置文件位置
/etc/default/atop # Debian/Ubuntu
/etc/sysconfig/atop # CentOS/RHEL
# 配置文件示例
INTERVAL=600 # 采样间隔(秒)
LOGPATH=/var/log/atop # 日志保存路径
LOGINTERVAL=86400 # 日志文件切换间隔(秒)
LOGDAYS=28 # 保留日志天数
# 启用atop服务
sudo systemctl enable atop
sudo systemctl start atop
# 检查服务状态
sudo systemctl status atop
# 手动触发日志轮转
sudo systemctl restart atop
# 查看当前配置
sudo atop -V
注意事项:
- atop需要root权限才能收集完整的系统信息
- 日志文件可能占用较多磁盘空间,建议合理配置日志保留策略
- 在生产环境使用前,先测试性能影响
- atop的数据收集可能影响高IO系统的性能
- 历史数据文件需要定期清理,避免磁盘空间不足
- 某些发行版可能需要额外安装内核模块支持完整功能
- atop的CPU统计比top更准确,但可能略有差异
atop与top/htop对比
| 特性 |
atop |
top |
htop |
| 历史数据记录 |
✓ 支持,可回放 |
✗ 不支持 |
✗ 不支持 |
| 磁盘IO监控 |
✓ 详细监控 |
✗ 基本监控 |
△ 有限监控 |
| 网络监控 |
✓ 详细监控 |
✗ 不支持 |
✗ 不支持 |
| 进程级磁盘IO |
✓ 支持 |
✗ 不支持 |
✗ 不支持 |
| 压力失速信息 |
✓ 支持 |
✗ 不支持 |
✗ 不支持 |
| 交互式界面 |
△ 功能丰富 |
△ 基本功能 |
✓ 界面友好 |
| 学习曲线 |
△ 较陡 |
✓ 简单 |
✓ 简单 |
| 推荐用途 |
专业性能分析、故障调查 |
快速系统状态检查 |
交互式进程管理 |
安装atop
atop不是默认安装的,需要手动安装:
# Ubuntu/Debian
sudo apt-get install atop
# CentOS/RHEL/Fedora
sudo yum install atop
# Arch Linux
sudo pacman -S atop
# 从源码编译安装
wget http://www.atoptool.nl/download/atop-2.7.1.tar.gz
tar -xzf atop-2.7.1.tar.gz
cd atop-2.7.1
make
sudo make install
# 安装内核模块(可选,增强功能)
sudo modprobe netatop # 网络监控增强
sudo modprobe pidmon # 进程监控增强
# 验证安装
atop -V
或
which atop
实际案例:性能问题排查
场景:系统响应缓慢问题排查
#!/bin/bash
# 系统性能问题排查脚本
echo "=== 系统性能问题排查 ==="
echo "开始时间: $(date)"
# 1. 检查当前系统状态
echo -e "\n1. 当前系统状态:"
atop 1 1 | head -20
# 2. 检查历史数据
echo -e "\n2. 最近10分钟的历史数据:"
DATE=$(date +%Y%m%d)
START_TIME=$(date -d "10 minutes ago" +%H%M)
END_TIME=$(date +%H%M)
atop -r /var/log/atop/atop_$DATE -b $START_TIME -e $END_TIME 2>/dev/null || \
echo "历史数据不可用,请检查atop服务"
# 3. 查找资源消耗最高的进程
echo -e "\n3. CPU消耗最高的5个进程:"
atop -c 1 1 | grep -A5 "PID"
echo -e "\n4. 内存消耗最高的5个进程:"
atop -m 1 1 | grep -A5 "PID"
echo -e "\n5. 磁盘IO最高的5个进程:"
atop -d 1 1 | grep -A5 "PID"
# 4. 检查系统瓶颈
echo -e "\n6. 系统瓶颈分析:"
echo -n "CPU负载: "; uptime | awk '{print $10,$11,$12}'
echo -n "内存使用: "; free -h | grep Mem | awk '{print $3"/"$2}'
echo -n "磁盘使用: "; df -h / | tail -1 | awk '{print $5}'
# 5. 建议
echo -e "\n7. 建议:"
echo "1) 查看完整的atop报告: atop -r /var/log/atop/atop_$(date +%Y%m%d)"
echo "2) 检查系统日志: journalctl -xe --since \"10 minutes ago\""
echo "3) 检查特定进程: atop -p [PID]"
echo -e "\n排查完成时间: $(date)"
相关工具
atopsar - 生成系统活动报告
atopcat - 转换二进制日志为文本
atoprc - atop配置文件
atop.d - atop插件目录
atop-rotate - 日志轮转脚本
atop-convert - 格式转换脚本
atop-acct - 计费统计脚本
atop-graph - 图形化展示脚本
相关命令