Linux 下最强的历史回溯监控工具——能看到过去发生了什么


一、atop 是什么

1.1 一句话解释

atop 是一个能记录历史数据的系统监控工具。top/htop 只能看到"现在",atop 能看到"过去"。

1.2 atop 比 top/htop 好在哪里

功能

top

htop

atop

实时监控

支持

支持

支持

历史记录

不支持

不支持

支持(自动记录)

回溯分析

不支持

不支持

支持(看过去的 CPU/内存/磁盘/网络)

磁盘监控

不支持

不支持

支持

网络监控

不支持

不支持

支持

进程审计

不支持

不支持

支持(看哪个进程吃了多少资源)

自动定时采集

不支持

不支持

支持(每 10 分钟自动保存一次)

写报告

不支持

不支持

支持(生成可读报告)

1.3 什么时候用 atop

场景

为什么用 atop

服务器昨晚出了问题

回溯看过去 24 小时的资源使用情况

CPU 突然飙高但不知道什么时候开始的

回溯看 CPU 历史曲线

磁盘满了但不知道什么时候写的

回溯看磁盘 I/O 历史

内存泄漏

回溯看内存变化趋势

网络异常

回溯看网络流量历史


二、安装和启动

2.1 安装

 sudo apt install -y atop

2.2 启动

 # 直接启动
 sudo atop
 ​
 # 指定采集间隔(秒)
 sudo atop 5    # 每 5 秒刷新一次
 ​
 # 退出:按 q

2.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     145M

3.1 系统汇总区(前 7 行)

PRC 行:进程统计

 PRC | sys    0.30  0.24  0.00  0/345  1 | sysc     0.01  0.00 |  1256/1256

字段

什么意思

sys 0.30

进程切换率(每秒上下文切换次数)

0/345

运行中进程数 / 总进程数

1

僵尸进程数

1256/1256

线程数 / 最大线程数

CPU 行:CPU 使用率

 CPU | sys   1.2%  user  5.2%  nice  0.0%  idle 93.1%  wait  0.3% |  800% total

字段

什么意思

sys 1.2%

内核占用

user 5.2%

用户程序占用

idle 93.1%

空闲率

wait 0.3%

磁盘等待

800% total

总 CPU 使用率(8 核心 × 100%)

800% total 就是 top 里说的"CPU% 能超过 100%"的原理。你的 CPU 有 8 个核心,所以最高 800%。

CPL 行:系统负载

 CPL | avg1  0.52  avg5  0.38  avg15 0.29  |               ncpu     8

字段

什么意思

avg1 0.52

过去 1 分钟的平均负载

avg5 0.38

过去 5 分钟的平均负载

avg15 0.29

过去 15 分钟的平均负载

ncpu 8

CPU 核心数

负载 < 核心数(8) → 正常;负载 > 8 → 过载

MEM 行:内存使用

MEM | total 31.4G  free  4.5G  cache 14.0G  |         slab  1.2G

字段

什么意思

total 31.4G

物理内存总量

free 4.5G

空闲内存

cache 14.0G

缓存(可回收)

slab 1.2G

内核缓存

SWP 行:交换分区

SWP | total  8.0G  free  7.8G               |              |  pswc    190

字段

什么意思

total 8.0G

交换分区总量

free 7.8G

交换分区空闲量

pswc 190

交换分区使用量(MB)

DSK 行:磁盘 I/O

DSK |          sda  busy  0.3%  read  125   write   89   |  KB/s    234

字段

什么意思

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

字段

什么意思

tcpi 12

TCP 入站连接数

tcpo 11

TCP 出站连接数

udpi 3

UDP 入站数

KB/s 567

网络传输速度

这也是 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     892M

字段

什么意思

重要性

PID

进程编号

杀进程要用

User

用户名

偶尔看

Command

命令名

必看

CPU%

CPU 使用率

最重要

MEM%

内存使用率

第二重要

MEM

实际物理内存

重要

VERT

虚拟内存

偶尔看

SWAP

使用的交换分区

看内存泄漏

S

进程状态

看情况

EUID

有效用户 ID

一般不用

rcmd

实际命令行

比 Command 更详细

rmem

实际内存

比 MEM 更详细

3.4 为什么 VIRT 显示几千 G?是不是内存泄漏?

不是,VIRT 不是真实占用的内存。

字段

全称

你可能看到的值

真实含义

VIRT

Virtual

1450G

进程向系统申请了多少内存(不一定真用)

RES

Resident

610M

进程实际正在用多少内存

打个比方:你去餐厅,服务员说"这张桌子最大能坐 100 人"(VIRT),但你实际只坐了 3 个人(RES)。桌子的"容量"不等于"实际占用"。

Edge、Chrome、Trae 等基于 Chromium 的程序,启动时会向系统申请一大块虚拟内存,但实际只用其中一小部分。看内存只看 RES 和 MEM%,不要看 VIRT。

3.5 为什么 NI 列有负数?负数是什么意思?

NI = Nice 值,范围是 -20 到 19,用来调整进程的优先级。

NI 值

优先级

谁设的

-20

最高

系统/管理员

-15

很高

音频服务等需要低延迟的

-10

较高

桌面环境等需要流畅的

0

默认

大多数程序

5

略低

程序自己

19

最低

不着急的进程

简单理解:负数 = 越小越优先。NI 是 -15 比 NI 是 0 的进程更优先执行。


四、交互操作

4.1 视图切换(atop 最强大的功能)

快捷键

作用

显示什么

g

通用视图(默认)

综合概览

m

内存视图

内存详细使用情况

d

磁盘视图

磁盘 I/O 详细信息

n

网络视图

网络流量详细信息

s

进程调度视图

进程优先级和调度信息

v

进程各类资源视图

进程的 CPU/内存/磁盘/网络

c

命令行视图

显示完整的命令行参数

p

进程视图

进程详细信息

j

cgroup 视图

容器(Docker)资源使用

4.2 排序

快捷键

作用

P

按 CPU 排序

M

按内存排序

D

按磁盘 I/O 排序

N

按网络排序

C

按 CPU 累计时间排序

E

按退出内存排序

R

反转排序

4.3 其他操作

快捷键

作用

t

下一个采样

T

上一个采样

1

显示每个 CPU 核心

k

杀进程

r

调整优先级

f

过滤进程

q

退出


五、历史回溯(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 10

5.2 查看昨天的记录

# 查看昨天的数据
sudo atop -r /var/log/atop/atop_$(date -d "yesterday" +%Y%m%d)

5.3 在历史记录中导航

打开历史记录后,用以下键导航:

快捷键

作用

t

跳到下一个采样点(10 分钟后)

T

跳到上一个采样点(10 分钟前)

b

跳到指定时间

P

按 CPU 排序

M

按内存排序

D

按磁盘 I/O 排序

q

退出

5.4 跳到指定时间

  1. 按 b

  2. 输入时间(格式:HH:MM)

  3. 按回车

例如:输入 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.txt

6.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。


九、top vs htop vs atop 对比总结

功能

top

htop

atop

实时监控

支持

支持

支持

历史记录

不支持

不支持

支持

回溯分析

不支持

不支持

支持

磁盘 I/O

不支持

不支持

支持

网络监控

不支持

不支持

支持

容器监控

不支持

不支持

支持(cgroup)

彩色显示

不支持

支持

支持

鼠标操作

不支持

支持

不支持

自动采集

不支持

不支持

支持

生成报告

不支持

不支持

支持

系统自带

是

需安装

需安装


十、命令速查表

命令

说明

sudo atop

启动 atop

sudo atop 5

每 5 秒采集一次

sudo atop -r /var/log/atop/atop_20260704

查看历史记录

sudo atop -r ... -i 5

查看历史记录,5 秒刷新

sudo atop -r ... -P CPU -w report.txt

导出 CPU 数据

sudo atop -r ... -P CPU,MEM,DSK -w report.txt

导出多种数据

sudo atop -w output.txt 10

批处理模式,每 10 秒采集

ls /var/log/atop/

查看历史数据文件

systemctl status atop

查看 atop 服务状态

视图快捷键

说明

g

通用视图

m

内存视图

d

磁盘视图

n

网络视图

s

进程调度视图

v

进程资源视图

c

命令行视图

p

进程视图

j

cgroup 视图

排序快捷键

说明

P

按 CPU 排序

M

按内存排序

D

按磁盘排序

N

按网络排序

C

按累计 CPU 排序

R

反转排序

导航快捷键

说明

t

下一个采样点

T

上一个采样点

b

跳到指定时间

1

显示每个 CPU 核心

k

杀进程

q

退出