Linux 下最强的历史回溯监控工具——能看到过去发生了什么
一、atop 是什么
1.1 一句话解释
atop 是一个能记录历史数据的系统监控工具。top/htop 只能看到"现在",atop 能看到"过去"。
1.2 atop 比 top/htop 好在哪里
1.3 什么时候用 atop
二、安装和启动
2.1 安装
sudo apt install -y atop2.2 启动
# 直接启动
sudo atop
# 指定采集间隔(秒)
sudo atop 5 # 每 5 秒刷新一次
# 退出:按 q2.3 atop 的自动采集服务
atop 安装后会自动创建一个定时任务,每 10 分钟自动采集一次系统数据:
# 查看自动采集服务
systemctl status atop
# 查看定时任务
systemctl list-timers | grep atop数据保存在 /var/log/atop/ 目录下:
ls /var/log/atop/
# 输出:atop_20260704 atop_20260703 atop_20260702 ...
# 每天一个文件,自动清理(默认保留 28 天)三、atop 界面详解
输入 sudo atop 后,你会看到这样的界面:
ATOP - zhangzhengyang 07/04/26 17:30:45 10 days elapsed
PRC | sys 0.30 0.24 0.00 0/345 1 | sysc 0.01 0.00 | 1256/1256
CPU | sys 1.2% user 5.2% nice 0.0% idle 93.1% wait 0.3% | 800% total
CPL | avg1 0.52 avg5 0.38 avg15 0.29 | ncpu 8
MEM | total 31.4G free 4.5G cache 14.0G | slab 1.2G
SWP | total 8.0G free 7.8G | | pswc 190
DSK | sda busy 0.3% read 125 write 89 | KB/s 234
NET | transport tcpi 12 tcpo 11 udpi 3 | KB/s 567
| IP ipi 15 ipo 14 | KB/s 890
PID User Command CPU% MEM% MEM VERT SWAP S EUID rcmd rmem
1234 zhang+ gnome-shell 3.2 0.4 125M 892M 0 S 1000 125M 892M
2345 zhang+ bash 1.8 0.1 32M 145M 0 S 1000 32M 145M3.1 系统汇总区(前 7 行)
PRC 行:进程统计
PRC | sys 0.30 0.24 0.00 0/345 1 | sysc 0.01 0.00 | 1256/1256CPU 行:CPU 使用率
CPU | sys 1.2% user 5.2% nice 0.0% idle 93.1% wait 0.3% | 800% total800% total 就是 top 里说的"CPU% 能超过 100%"的原理。你的 CPU 有 8 个核心,所以最高 800%。
CPL 行:系统负载
CPL | avg1 0.52 avg5 0.38 avg15 0.29 | ncpu 8负载 < 核心数(8) → 正常;负载 > 8 → 过载
MEM 行:内存使用
MEM | total 31.4G free 4.5G cache 14.0G | slab 1.2GSWP 行:交换分区
SWP | total 8.0G free 7.8G | | pswc 190DSK 行:磁盘 I/O
DSK | sda busy 0.3% read 125 write 89 | KB/s 234这是 ato 独有的功能,top/htop 不显示磁盘 I/O!
NET 行:网络流量
NET | transport tcpi 12 tcpo 11 udpi 3 | KB/s 567
| IP ipi 15 ipo 14 | KB/s 890这也是 atop 独有的功能!
3.2 进程列表区
PID User Command CPU% MEM% MEM VERT SWAP S EUID rcmd rmem
1234 zhang+ gnome-shell 3.2 0.4 125M 892M 0 S 1000 125M 892M3.4 为什么 VIRT 显示几千 G?是不是内存泄漏?
不是,VIRT 不是真实占用的内存。
打个比方:你去餐厅,服务员说"这张桌子最大能坐 100 人"(VIRT),但你实际只坐了 3 个人(RES)。桌子的"容量"不等于"实际占用"。
Edge、Chrome、Trae 等基于 Chromium 的程序,启动时会向系统申请一大块虚拟内存,但实际只用其中一小部分。看内存只看 RES 和 MEM%,不要看 VIRT。
3.5 为什么 NI 列有负数?负数是什么意思?
NI = Nice 值,范围是 -20 到 19,用来调整进程的优先级。
简单理解:负数 = 越小越优先。NI 是 -15 比 NI 是 0 的进程更优先执行。
四、交互操作
4.1 视图切换(atop 最强大的功能)
4.2 排序
4.3 其他操作
五、历史回溯(atop 最核心的功能)
5.1 查看今天的记录
# 查看今天的数据
sudo atop -r /var/log/atop/atop_$(date +%Y%m%d)
# 查看今天的数据,每 10 秒刷新一次
sudo atop -r /var/log/atop/atop_$(date +%Y%m%d) -i 105.2 查看昨天的记录
# 查看昨天的数据
sudo atop -r /var/log/atop/atop_$(date -d "yesterday" +%Y%m%d)5.3 在历史记录中导航
打开历史记录后,用以下键导航:
5.4 跳到指定时间
按
b输入时间(格式:
HH:MM)按回车
例如:输入 02:30 跳到凌晨 2:30
5.5 实战:回溯昨晚的 CPU 飙高
# 第 1 步:打开昨天的记录
sudo atop -r /var/log/atop/atop_20260703
# 第 2 步:按 P 按 CPU 排序
# 第 3 步:按 t 逐个采样点查看
# 看看哪个时间点 CPU 最高
# 第 4 步:找到异常时间点后,按 c 查看完整命令行
# 看看是什么程序在消耗 CPU
# 第 5 步:按 j 查看是不是容器里的进程六、命令行参数
6.1 基本用法
# 启动 atop
sudo atop
# 指定采集间隔
sudo atop 5 # 每 5 秒采集一次
# 指定批处理模式(输出到文件)
sudo atop -w /tmp/atop_output.txt 10
# 每 10 秒采集一次,保存到文件6.2 读取历史记录
# 读取指定文件
sudo atop -r /var/log/atop/atop_20260704
# 读取并指定刷新间隔
sudo atop -r /var/log/atop/atop_20260704 -i 5
# 读取并输出到文件(生成报告)
sudo atop -r /var/log/atop/atop_20260704 -P CPU,MEM,DSK -w /tmp/report.txt6.3 生成报告
# 导出 CPU 数据
sudo atop -r /var/log/atop/atop_20260704 -P CPU -w /tmp/cpu_report.txt
# 导出内存数据
sudo atop -r /var/log/atop/atop_20260704 -P MEM -w /tmp/mem_report.txt
# 导出磁盘数据
sudo atop -r /var/log/atop/atop_20260704 -P DSK -w /tmp/dsk_report.txt
# 导出网络数据
sudo atop -r /var/log/atop/atop_20260704 -P NET -w /tmp/net_report.txt
# 导出所有数据
sudo atop -r /var/log/atop/atop_20260704 -P CPU,MEM,DSK,NET -w /tmp/full_report.txt七、实战场景
7.1 场景 1:服务器昨晚 3 点 CPU 飙高,找出原因
# 第 1 步:打开昨天的数据
sudo atop -r /var/log/atop/atop_20260703
# 第 2 步:跳到凌晨 3 点
# 按 b,输入 03:00,按回车
# 第 3 步:按 P 按 CPU 排序
# 看看哪个进程占了最多 CPU
# 第 4 步:按 c 查看完整命令行
# 确认是什么程序
# 第 5 步:按 t 逐个采样点查看
# 看看 CPU 飙高持续了多久7.2 场景 2:磁盘满了,找出什么时候写的
# 第 1 步:切换到磁盘视图
# 按 d
# 第 2 步:按 D 按磁盘 I/O 排序
# 看哪个进程在大量写磁盘
# 第 3 步:跳到不同时间点
# 按 t 逐个查看,看看什么时候 I/O 最高7.3 场景 3:内存泄漏,找出哪个进程在慢慢吃内存
# 第 1 步:切换到内存视图
# 按 m
# 第 2 步:按 M 按内存排序
# 第 3 步:逐个时间点查看
# 按 t 跳到下一个采样点
# 观察哪个进程的内存一直在增长
# 第 4 步:记录进程的 PID 和内存变化
# 如果某个进程内存一直在涨,就是内存泄漏7.4 场景 4:Docker 容器资源监控
# 第 1 步:切换到 cgroup 视图
# 按 j
# 第 2 步:查看每个容器的资源使用
# 可以看到每个 Docker 容器的 CPU/内存/磁盘/网络7.5 场景 5:生成每日报告
# 生成今天的完整报告
sudo atop -r /var/log/atop/atop_$(date +%Y%m%d) \
-P CPU,MEM,DSK,NET \
-w /tmp/daily_report_$(date +%Y%m%d).txt
# 查看报告
cat /tmp/daily_report_$(date +%Y%m%d).txt八、常见问题
Q1:atop 和 top/htop 用哪个?
看现在:用
top或htop看过去:用
atop分析问题:用
atop(能回溯历史)长期监控:用
atop(自动记录)
Q2:atop 的数据保存多久?
默认保留 28 天。可以修改配置:
# 查看配置文件
cat /etc/default/atop
# 修改保留天数
# 修改 LOGGENERATIONS=28 为你想要的天数Q3:atop 的采集间隔可以改吗?
可以。默认每 10 分钟采集一次:
# 查看定时任务
systemctl cat atop
# 修改采集间隔(修改 /lib/systemd/system/atop.service)
# 把 600 改成你想要的秒数Q4:atop 占用多少资源?
atop 的 CPU 和内存占用非常低(通常 <1%),因为它是增量采集,不是持续渲染。
Q5:atop 的历史数据文件在哪里?
ls /var/log/atop/
# atop_20260704 atop_20260703 atop_20260702 ...Q6:atop 支持远程监控吗?
atop 主要是本地监控。远程监控建议用 Prometheus + Grafana 或 Zabbix。
评论交流
欢迎留下你的想法