强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

系统监控工具指南 / 第4章:atop详解

第4章:atop详解

4.1 atop概述

什么是atop

atop(Advanced System & Process Monitor)是一款强大的Linux系统监控工具,最大的特点是支持历史数据回放,能够查看过去任意时间点的系统状态。

为什么选择atop

  1. 历史回放 - 记录系统状态,支持事后分析
  2. 全面监控 - CPU、内存、磁盘、网络、进程全覆盖
  3. 资源消耗统计 - 统计每个进程的资源消耗
  4. 磁盘级别监控 - 精确到磁盘和分区
  5. 网络级别监控 - 精确到网络接口

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 磁盘监控详解

磁盘视图

# 进入atop后按d

磁盘视图输出:

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 网络监控详解

网络视图

# 进入atop后按n

网络视图输出:

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 内存分析详解

内存视图

# 进入atop后按m

内存视图输出:

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的使用:

  1. 安装配置: 安装方法、服务管理、配置文件
  2. 界面详解: 头部信息、进程列表、各字段含义
  3. 交互命令: 视图切换、导航、排序、过滤
  4. 历史回放: 核心功能,支持事后故障分析
  5. 磁盘监控: 磁盘视图、性能判断、IO分析
  6. 网络监控: 网络视图、流量统计、错误检测
  7. 内存分析: 内存视图、泄漏检测、Swap分析
  8. 高级功能: atopsar报告、数据导出、过滤
  9. 实战场景: 故障分析、性能排查、基准测试

atop是事后故障分析的利器,强烈建议在生产环境启用并长期运行。


上一章: 第3章:htop详解 下一章: 第5章:btop详解