第4章:atop详解
第4章:atop详解
4.1 atop概述
什么是atop
atop(Advanced System & Process Monitor)是一款强大的Linux系统监控工具,最大的特点是支持历史数据回放,能够查看过去任意时间点的系统状态。
为什么选择atop
- 历史回放 - 记录系统状态,支持事后分析
- 全面监控 - CPU、内存、磁盘、网络、进程全覆盖
- 资源消耗统计 - 统计每个进程的资源消耗
- 磁盘级别监控 - 精确到磁盘和分区
- 网络级别监控 - 精确到网络接口
atop vs 其他工具
| 特性 | atop | top | htop | glances |
|---|
| 实时监控 | ✓ | ✓ | ✓ | ✓ |
| 历史回放 | ✓ | ✗ | ✗ | 部分 |
| 磁盘监控 | ✓ | ✗ | ✗ | ✓ |
| 网络监控 | ✓ | ✗ | ✗ | ✓ |
| 进程资源统计 | ✓ | ✗ | ✗ | ✓ |
| 轻量级 | 中等 | 高 | 高 | 中等 |
4.2 安装与配置
安装方法
# Debian/Ubuntu
sudo apt update
sudo apt install atop
# CentOS/RHEL
sudo yum install epel-release
sudo yum install atop
# Fedora
sudo dnf install atop
# Arch Linux
sudo pacman -S atop
# openSUSE
sudo zypper install atop
服务管理
# 启动atop服务(后台记录)
sudo systemctl start atop
# 设置开机自启
sudo systemctl enable atop
# 查看服务状态
sudo systemctl status atop
# 停止服务
sudo systemctl stop atop
配置文件
# 主配置文件
/etc/default/atop
# 配置示例
cat /etc/default/atop
配置文件内容:
# /etc/default/atop
# 采样间隔(秒)
INTERVAL=60
# 日志保留天数
LOGGENERATIONS=28
# 日志压缩
LOGCOMPRESS="gzip"
# 日志路径
LOGPATH=/var/log/atop
修改配置:
# 编辑配置
sudo nano /etc/default/atop
# 修改采样间隔为30秒
INTERVAL=30
# 修改保留天数为90天
LOGGENERATIONS=90
# 重启服务生效
sudo systemctl restart atop
日志管理
# 日志存储位置
ls -la /var/log/atop/
# 日志文件命名格式
# atop_YYYYMMDD
# 例如:atop_20260510
# 查看日志大小
du -sh /var/log/atop/
# 手动清理旧日志
find /var/log/atop/ -name "atop_*" -mtime +30 -delete
4.3 界面详解
启动atop
# 实时监控模式
sudo atop
# 回放历史模式
sudo atop -r /var/log/atop/atop_20260510
# 指定时间开始
sudo atop -r /var/log/atop/atop_20260510 -b 14:00
头部信息
ATOP - server1 2026/05/10 14:32:15 10 days, 3:21:45 1c
PRC | sys 1.23s | user 2.34s | idle 56.43s | wait 0.12s | #proc 215 |
cpu | sys 5% | user 10% | irq 1% | idle 83% | wait 1% |
CPL | avg1 0.52 | avg5 0.58 | avg15 0.59 | | csw 12345 |
MEM | tot 16.0G | free 8.0G | cache 4.0G | buff 1.0G | slab 1.0G |
SWP | tot 8.0G | free 8.0M | | | vmcom 12G |
DSK | sda | busy 45% | read 1234 | write 5678 | avio 5.0ms |
NET | transport | tcpi 1234 | tcpo 5678 | udpi 123 | udpo 456 |
NET | network | ipi 2345 | ipo 3456 | ipfrw 0 | deliv 2345 |
头部字段详解
PRC行 - 进程统计
| 字段 | 含义 |
|---|
| sys | 内核空间CPU时间 |
| user | 用户空间CPU时间 |
| idle | 空闲CPU时间 |
| wait | IO等待时间 |
| #proc | 进程总数 |
cpu行 - CPU使用率
| 字段 | 含义 |
|---|
| sys | 内核空间使用率 |
| user | 用户空间使用率 |
| irq | 中断处理 |
| idle | 空闲率 |
| wait | IO等待率 |
CPL行 - 负载与上下文切换
| 字段 | 含义 |
|---|
| avg1 | 1分钟平均负载 |
| avg5 | 5分钟平均负载 |
| avg15 | 15分钟平均负载 |
| csw | 上下文切换次数 |
MEM行 - 内存使用
| 字段 | 含义 |
|---|
| tot | 总物理内存 |
| free | 空闲内存 |
| cache | 页缓存 |
| buff | 缓冲区 |
| slab | 内核slab分配 |
SWP行 - 交换分区
| 字段 | 含义 |
|---|
| tot | 交换分区总量 |
| free | 空闲交换分区 |
| vmcom | 已承诺虚拟内存 |
| vmlim | 虚拟内存限制 |
DSK行 - 磁盘使用
| 字段 | 含义 |
|---|
| busy | 磁盘忙碌百分比 |
| read | 读请求数 |
| write | 写请求数 |
| avio | 平均IO延迟(毫秒) |
NET行 - 网络统计
| 字段 | 含义 |
|---|
| tcpi | TCP接收包数 |
| tcpo | TCP发送包数 |
| udpi | UDP接收包数 |
| udpo | UDP发送包数 |
| ipi | IP接收包数 |
| ipo | IP发送包数 |
进程列表
PID SYSCPU USRCPU VGROW RGROW RDDSK WRDSK ST EXC S CMD 1/1
1234 0.12s 0.34s 0K 1234K 0K 4567K -- - S nginx
5678 0.56s 1.23s 123M 65432K 123K 567K -- - S mysqld
| 字段 | 含义 |
|---|
| PID | 进程ID |
| SYSCPU | 系统CPU时间 |
| USRCPU | 用户CPU时间 |
| VGROW | 虚拟内存增长 |
| RGROW | 常驻内存增长 |
| RDDSK | 读磁盘字节 |
| WRDSK | 写磁盘字节 |
| ST | 状态 |
| CMD | 命令名 |
4.4 交互命令
视图切换命令
| 按键 | 功能 | 显示内容 |
|---|
g | 通用视图 | 默认综合视图 |
m | 内存视图 | 内存详细信息 |
d | 磁盘视图 | 磁盘IO详情 |
n | 网络视图 | 网络接口统计 |
s | 调度视图 | 进程调度信息 |
v | 进程视图 | 进程详细信息 |
c | 命令行视图 | 显示完整命令行 |
p | 进程视图 | 显示每个进程 |
导航命令
| 按键 | 功能 |
|---|
t | 下一个采样点 |
T | 上一个采样点 |
b | 跳转到指定时间 |
r | 回到最近数据 |
↓ | 下一行 |
↑ | 上一行 |
Page Down | 下一页 |
Page Up | 上一页 |
Home | 首页 |
End | 末页 |
排序命令
| 按键 | 功能 |
|---|
C | 按CPU排序 |
M | 按内存排序 |
D | 按磁盘排序 |
N | 按网络排序 |
A | 自动排序(按资源消耗) |
显示选项
| 按键 | 功能 |
|---|
l | 显示/隐藏系统行 |
f | 显示/隐藏过滤信息 |
x | 显示/隐藏列标题 |
1 | 显示/隐藏CPU每核 |
h | 帮助 |
q | 退出 |
过滤命令
| 按键 | 功能 |
|---|
p | 按进程过滤 |
u | 按用户过滤 |
j | 按cgroup过滤 |
/ | 按命令名过滤 |
4.5 历史回放功能
基本回放
# 回放今天的数据
sudo atop -r
# 回放指定日期的数据
sudo atop -r /var/log/atop/atop_20260510
# 回放昨天的数据
sudo atop -r /var/log/atop/atop_$(date -d yesterday +%Y%m%d)
指定时间范围
# 从14:00开始回放
sudo atop -r -b 14:00
# 到16:00结束
sudo atop -r -b 14:00 -e 16:00
# 指定日期和时间
sudo atop -r /var/log/atop/atop_20260510 -b 14:00
回放导航
# 进入回放模式后
# 下一个采样点(按t)
# 默认间隔60秒
# 上一个采样点(按T)
# 跳转到指定时间(按b)
# 输入时间格式:HH:MM
# 返回最新数据(按r)
回放示例场景
场景1:分析昨天下午的性能问题
# 1. 进入回放模式
sudo atop -r /var/log/atop/atop_$(date -d yesterday +%Y%m%d)
# 2. 跳转到问题时间段
# 按b → 输入14:00
# 3. 逐步查看
# 按t前进,观察CPU、内存、磁盘变化
# 4. 切换到详细视图
# 按m查看内存
# 按d查看磁盘
# 按n查看网络
场景2:找出资源消耗高峰
# 1. 回放模式
sudo atop -r
# 2. 自动排序
# 按A启用自动排序
# 3. 快速浏览
# 按t快速前进
# 4. 找到高峰点后详细分析
# 按v查看进程详情
4.6 磁盘监控详解
磁盘视图
磁盘视图输出:
DSK | sda | busy 45% | read 1234 | write 5678 | avio 5.0ms |
DSK | sdb | busy 20% | read 567 | write 234 | avio 2.0ms |
磁盘字段详解
| 字段 | 含义 | 单位 | 正常范围 |
|---|
| busy | 磁盘忙碌时间百分比 | % | <70% |
| read | 读请求数 | 次/秒 | 取决于磁盘 |
| write | 写请求数 | 次/秒 | 取决于磁盘 |
| avio | 平均IO延迟 | 毫秒 | <10ms |
| KiB/r | 平均读大小 | KB | |
| KiB/w | 平均写大小 | KB | |
| MBr/s | 读吞吐量 | MB/秒 | |
| MBw/s | 写吞吐量 | MB/秒 | |
磁盘性能判断
| avio值 | 性能评估 | 可能原因 |
|---|
| <5ms | 优秀 | SSD或低负载 |
| 5-10ms | 正常 | 普通HDD |
| 10-20ms | 一般 | 较高负载 |
| 20-50ms | 较差 | IO瓶颈 |
| >50ms | 严重瓶颈 | 需要优化 |
进程磁盘使用
# 在atop中查看进程磁盘使用
# 按d进入磁盘视图
# 查看RDDSK和WRDSK列
进程磁盘统计:
| 字段 | 含义 |
|---|
| RDDSK | 读取的磁盘字节 |
| WRDSK | 写入的磁盘字节 |
| DSK | 磁盘使用率 |
| PID | 进程ID |
| CMD | 命令名 |
磁盘故障排查
# 1. 查看磁盘忙碌度
atop
# 按d
# 2. 如果busy持续>80%,分析IO来源
# 查看RDDSK/WRDSK列,找IO大户
# 3. 结合iostat详细分析
iostat -x 1
# 4. 使用iotop精确分析
sudo iotop -o
4.7 网络监控详解
网络视图
网络视图输出:
NET | transport | tcpi 1234 | tcpo 5678 | udpi 123 | udpo 456 |
NET | network | ipi 2345 | ipo 3456 | ipfrw 0 | deliv 2345 |
NET | eth0 ----| pcki 3456 | pcko 4568 | si 567Kbps | so 1234Kbps |
NET | eth0 ----| coll 0 | errr 0 | erri 0 | drpr 0 |
网络字段详解
Transport层
| 字段 | 含义 |
|---|
| tcpi | TCP输入段 |
| tcpo | TCP输出段 |
| udpi | UDP输入数据报 |
| udpo | UDP输出数据报 |
| tcpao | TCP活跃打开数 |
| tcppo | TCP被动打开数 |
Network层
| 字段 | 含义 |
|---|
| ipi | IP输入包 |
| ipo | IP输出包 |
| ipfrw | IP转发包 |
| deliv | 传递到上层的包 |
接口层
| 字段 | 含义 |
|---|
| pcki | 接收包数 |
| pcko | 发送包数 |
| si | 输入速率 |
| so | 输出速率 |
| coll | 冲突数 |
| errr | 接收错误 |
| erri | 发送错误 |
| drpr | 丢包数 |
网络性能判断
| 指标 | 正常值 | 异常表现 | 可能原因 |
|---|
| coll | 0 | >0 | 网络冲突 |
| errr | 0 | >0 | 网卡或线路问题 |
| erri | 0 | >0 | 发送错误 |
| drpr | 低 | 高 | 缓冲区溢出 |
4.8 内存分析详解
内存视图
内存视图输出:
MEM | tot 16.0G | free 8.0G | cache 4.0G | buff 1.0G | slab 1.0G |
SWP | tot 8.0G | free 8.0M | | | vmcom 12G |
内存字段详解
| 字段 | 含义 | 说明 |
|---|
| tot | 总物理内存 | 系统总内存 |
| free | 空闲内存 | 完全未使用 |
| cache | 页缓存 | 文件系统缓存,可回收 |
| buff | 缓冲区 | 块设备缓冲 |
| slab | 内核slab | 内核数据结构缓存 |
| dirty | 脏页 | 等待写回磁盘 |
| rss | 常驻内存集 | 实际使用物理内存 |
| vmcom | 已承诺虚拟内存 | 进程申请的总虚拟内存 |
| vmlim | 虚拟内存限制 | 最大可用虚拟内存 |
进程内存分析
# 在atop中查看进程内存
# 查看VGROW和RGROW列
| 字段 | 含义 | 说明 |
|---|
| VGROW | 虚拟内存增长 | 本次采样期间的增长 |
| RGROW | 常驻内存增长 | 本次采样的物理内存增长 |
| VSize | 虚拟内存大小 | 进程总虚拟内存 |
| RSize | 常驻内存大小 | 进程总物理内存 |
内存泄漏检测
# 1. 使用atop监控
sudo atop
# 2. 关注RGROW列
# 如果某进程RGROW持续为正数,可能存在内存泄漏
# 3. 结合历史数据
sudo atop -r
# 4. 跳转到问题开始时间
# 按b → 输入时间
# 5. 逐步观察内存变化
# 按t前进
Swap使用分析
# 查看Swap使用
# 如果SWP的free持续减少,说明内存不足
# 常见原因
# 1. 应用内存泄漏
# 2. 应用配置的内存过大
# 3. 系统内存不足
# 解决方案
# 1. 找出内存消耗大户
# 2. 优化应用配置
# 3. 增加物理内存
4.9 高级功能
4.9.1 系统资源汇总
# 启动atop时显示汇总
sudo atop -@
# 汇总显示整个时间段的资源使用
# 包括总CPU时间、总IO量等
4.9.2 过滤显示
# 只显示活跃进程
sudo atop -a
# 只显示特定用户
sudo atop -u username
# 只显示特定进程
sudo atop -p PID
# 只显示特定命令
# 进入atop后按/ → 输入命令名
4.9.3 输出到文件
# 采样10次,间隔5秒,输出到文件
sudo atop 5 10 -o /tmp/atop_output
# 后台运行
sudo atop 60 -o /tmp/atop_output &
# 生成可读报告
sudo atopsar -r /tmp/atop_output
4.9.4 使用atopsar
atopsar 是atop的报告工具,类似SAR。
# 查看今天的CPU统计
sudo atopsar -c
# 查看今天的内存统计
sudo atopsar -m
# 查看今天的磁盘统计
sudo atopsar -d
# 查看今天的网络统计
sudo atopsar -i
# 查看指定日期
sudo atopsar -c -r /var/log/atop/atop_20260510
# 指定时间范围
sudo atopsar -c -b 14:00 -e 16:00
atopsar选项:
| 选项 | 功能 |
|---|
| -c | CPU统计 |
| -m | 内存统计 |
| -d | 磁盘统计 |
| -i | 网络接口统计 |
| -I | 网络统计 |
| -f | 系统负载 |
| -p | 进程统计 |
| -r | 指定文件 |
4.9.5 生成报告
# 生成文本报告
sudo atop -r -b 14:00 -e 16:00 > report.txt
# 使用atopsar生成报告
sudo atopsar -c -r /var/log/atop/atop_20260510 > cpu_report.txt
# 生成CSV格式
sudo atopsar -c -r /var/log/atop/atop_20260510 -P > cpu_report.csv
4.10 实战场景
场景1:事后故障分析
问题: 昨天下午3点服务器响应缓慢
# 1. 进入回放模式
sudo atop -r /var/log/atop/atop_$(date -d yesterday +%Y%m%d)
# 2. 跳转到下午3点
# 按b → 输入15:00
# 3. 分析CPU
# 观察cpu行,看us、sys、wait
# 4. 分析内存
# 按m,观察MEM和SWP
# 5. 分析磁盘
# 按d,观察busy和avio
# 6. 分析网络
# 按n,观察流量和错误
# 7. 找出资源消耗大户
# 按v查看进程详情
# 按C按CPU排序
# 按M按内存排序
场景2:磁盘IO瓶颈排查
# 1. 查看磁盘使用
sudo atop
# 按d
# 2. 如果busy>80%,找IO大户
# 观察RDDSK和WRDSK列
# 3. 回放历史,找IO高峰
sudo atop -r
# 按t逐步查看
# 4. 结合iostat分析
iostat -x 1
# 5. 使用iotop精确分析
sudo iotop -o
场景3:内存泄漏检测
# 1. 使用atop持续监控
sudo atop -r
# 2. 观察内存使用趋势
# 按m查看内存
# 3. 找出内存持续增长的进程
# 观察RGROW列
# 4. 结合valgrind分析
valgrind --tool=memcheck --leak-check=full ./your_program
场景4:网络流量分析
# 1. 查看网络接口
sudo atop
# 按n
# 2. 观察流量
# si - 输入流量
# so - 输出流量
# 3. 检查错误
# errr - 接收错误
# erri - 发送错误
# drpr - 丢包
# 4. 回放历史流量
sudo atop -r
# 按n查看网络视图
场景5:性能基准测试记录
# 1. 开始记录
sudo atop 10 -o /tmp/benchmark
# 2. 运行测试
./benchmark_test
# 3. 停止记录(Ctrl+C)
# 4. 分析结果
sudo atopsar -c -r /tmp/benchmark
sudo atopsar -d -r /tmp/benchmark
sudo atopsar -i -r /tmp/benchmark
4.11 配置优化
优化采样间隔
# 默认60秒,对于详细分析可能太长
# 编辑配置
sudo nano /etc/default/atop
# 修改为30秒
INTERVAL=30
# 或更短(但会占用更多磁盘)
INTERVAL=10
# 重启服务
sudo systemctl restart atop
调整日志保留
# 编辑配置
sudo nano /etc/default/atop
# 默认28天
LOGGENERATIONS=28
# 根据磁盘空间调整
# 保留90天
LOGGENERATIONS=90
# 或30天
LOGGENERATIONS=30
日志压缩
# 启用压缩(默认可能已启用)
sudo nano /etc/default/atop
LOGCOMPRESS="gzip"
# 重启服务
sudo systemctl restart atop
日志轮转
# atop内置日志轮转,每天一个文件
# 但磁盘满时需要手动清理
# 检查日志大小
du -sh /var/log/atop/
# 手动清理旧日志
find /var/log/atop/ -name "atop_*" -mtime +60 -delete
# 设置定时清理
# /etc/cron.daily/cleanup-atop
#!/bin/bash
find /var/log/atop/ -name "atop_*" -mtime +60 -delete
4.12 性能开销
资源消耗
| 配置 | CPU占用 | 磁盘占用 | 说明 |
|---|
| INTERVAL=60 | <0.1% | ~50MB/月 | 默认,轻量 |
| INTERVAL=30 | <0.2% | ~100MB/月 | 较详细 |
| INTERVAL=10 | <0.5% | ~300MB/月 | 非常详细 |
优化建议
# 生产环境推荐
INTERVAL=60
LOGGENERATIONS=30
# 开发/测试环境
INTERVAL=10
LOGGENERATIONS=7
# 磁盘空间紧张
INTERVAL=120
LOGGENERATIONS=14
4.13 常见问题
Q1: atop无法启动
# 检查服务状态
sudo systemctl status atop
# 查看日志
sudo journalctl -u atop
# 检查配置文件
cat /etc/default/atop
# 手动启动测试
sudo atop
Q2: 历史数据为空
# 检查服务是否运行
sudo systemctl status atop
# 检查日志目录
ls -la /var/log/atop/
# 检查日志文件权限
ls -la /var/log/atop/atop_*
Q3: 磁盘空间占用大
# 查看日志大小
du -sh /var/log/atop/
# 减少保留天数
sudo nano /etc/default/atop
LOGGENERATIONS=14
# 清理旧日志
find /var/log/atop/ -name "atop_*" -mtime +14 -delete
# 启用压缩
LOGCOMPRESS="gzip"
Q4: 回放时找不到数据
# 检查文件是否存在
ls -la /var/log/atop/
# 检查日期
# atop文件名格式:atop_YYYYMMDD
# 使用绝对路径
sudo atop -r /var/log/atop/atop_20260510
4.14 与其他工具对比
atop vs SAR
| 特性 | atop | SAR |
|---|
| 实时监控 | ✓ | ✓ |
| 历史回放 | 交互式 | 命令行 |
| 进程监控 | ✓ | 有限 |
| 磁盘详情 | ✓ | ✓ |
| 网络详情 | ✓ | ✓ |
| 易用性 | 中等 | 较低 |
atop vs Glances
| 特性 | atop | Glances |
|---|
| 历史回放 | ✓ | 有限 |
| Web界面 | ✗ | ✓ |
| API支持 | ✗ | ✓ |
| 告警功能 | ✗ | ✓ |
| 轻量级 | ✓ | 中等 |
4.15 扩展阅读
4.16 快捷命令参考
# 实时监控
sudo atop
# 回放今天数据
sudo atop -r
# 回放指定日期
sudo atop -r /var/log/atop/atop_20260510
# 指定时间
sudo atop -r -b 14:00
# 回放并指定时间范围
sudo atop -r -b 14:00 -e 16:00
# 只显示活跃进程
sudo atop -a
# 只显示特定用户
sudo atop -u mysql
# atopsar报告
sudo atopsar -c # CPU统计
sudo atopsar -m # 内存统计
sudo atopsar -d # 磁盘统计
sudo atopsar -i # 网络统计
4.17 本章小结
本章详细介绍了atop的使用:
- 安装配置: 安装方法、服务管理、配置文件
- 界面详解: 头部信息、进程列表、各字段含义
- 交互命令: 视图切换、导航、排序、过滤
- 历史回放: 核心功能,支持事后故障分析
- 磁盘监控: 磁盘视图、性能判断、IO分析
- 网络监控: 网络视图、流量统计、错误检测
- 内存分析: 内存视图、泄漏检测、Swap分析
- 高级功能: atopsar报告、数据导出、过滤
- 实战场景: 故障分析、性能排查、基准测试
atop是事后故障分析的利器,强烈建议在生产环境启用并长期运行。
上一章: 第3章:htop详解
下一章: 第5章:btop详解