使用atop工具监控Linux系统指标
atop允许用户通过交互界面即时洞察系统状态,还能作为后台服务运行,以指定频率记录系统与进程的活动快照,并将其保存为二进制日志,帮助用户精确回溯并诊 断系统问题。
安装atop
# for yum
sudo yum update -y
sudo yum install atop -y
sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install atop -y
sudo apt update -y
sudo apt install atop -y
sudo apt update -y
sudo apt install atop -y
启动 atop 服务。
sudo systemctl start atop
# 验证atop是否启动成功
sudo systemctl status atop
使用atop查看实时指标
- 执行
atop [采样间隔秒数] [采样次数]命令进入交互模式。
# 以默认配置查看(10秒刷新一次)。
atop
# 每5秒查看一次系统指标。
atop 5
# 以10秒为间隔,采集30次系统指标。
atop 10 30
# 以30秒为间隔,采集10次,并结果写入文件。
atop 30 10 > /tmp/atop.mem
- 系统资源概览:汇总了CPU、内存、交换空间、磁盘I/O和网络的整体使用情况。

- 进程级详情:展示了各个进程的资源消耗详情。

- 在交互模式下,可使用单个字母键切换视图或者排序。
| 按键 | 功能 | 用途 |
|---|---|---|
| c | 显示完整命令行 | 查看进程启动的具体参数。 |
| g | 通用视图(默认) | 综合查看 CPU、内存增长、磁盘 I/O。 |
| m/M | 内存视图/按内存排序 | 用于分析内存使用、页错误,排查内存泄漏。 |
| d/D | 磁盘视图/按磁盘排序 | 用于分析磁盘 I/O,定位磁盘读写高的进程。 |
| n/N | 网络视图/按网络排序(需安装并加载netatop内核模块) | 用于分析网络流量,定位网络流量大的进程。 |
| a | 聚合视图 | 将一个程序的所有线程/进程资源消耗聚合在一起。 |
| C | 按 CPU 排序 | 快速定位消耗 CPU 最多的进程。 |
| h | 显示帮助 | 查看更多快捷键。 |
| q | 退出 | 退出交互模式。 |
使用atop查看历史指标
atop服务成功运行后,会定期在/var/log/atop/目录下生成以atop_YYYYMMDD格式命名的二进制日志文件。
atop的日志是二进制文件,使用cat、less或vim等文本编辑器打开会显示乱码。
读取历史日志
- 读取历史日志文件。
使用atop -r <日志文件>命令加载指定的日志文件。
# 查看当天的日志,atop会自动查找当天的日志文件
atop -r
# 查看指定日期的日志
atop -r /var/log/atop/atop_YYYYMMDD
- 在日志中跳转到指定时间点。
- 加载日志后,界面显示的是该日志文件的第一个时间点快照。
- 按 t 键:向后跳转到下一个时间点的快照。
- 按 T 键(大写):向前跳转到上一个时间点的快照。
- 按 b 键:输入具体时间(格式 HH:MM),直接跳转到该时间点。
优化 atop 日志记录行为
在分析历史日志时,若发现默认的日志记录频率(10分钟一次)对于某些问题来说太过宽泛,或者默认的28天保留时长不能满足监控需求,可通过修改 atop 的配置文件来调整其后台日志的记录频率、保留天数和存储路径。
- 使用
vim或其他文本编辑器打开配置文件。
- RHEL 及其衍生版(Alibaba Cloud Linux,CentOS,Fedora,Rocky Linux)。
sudo vim /etc/sysconfig/atop
- Debian 及其衍生版(Ubuntu, Debian) ,openSUSE。
sudo vim /etc/default/atop
- 默认配置文件的内容如下:
LOGOPTS=""
LOGINTERVAL=600
LOGGENERATIONS=28
LOGPATH=/var/log/atop
-
LOGOPTS:额外的日志记录选项。例如,设置-L可在日志轮转时创建一个指向最新日志的符号链接 /var/log/atop/atop_current,方便快速访问。 -
LOGINTERVAL:日志记录的采样间隔,单位是秒。默认值通常是 600(即10分钟),表示每10分钟记录一次系统快照。 -
LOGGENERATIONS:日志文件的生命周期,单位是天。默认值通常是 28,表示 atop 会自动删除28天前的旧日志文件。 -
LOGPATH:日志文件存储路径,默认为/var/log/atop。
如果修改此路径,请确保新目录已存在且 atop 进程有写入权限。
- 配置修改后,需重启atop服务让配置生效。
sudo systemctl restart atop
生成指标报告
atopsar是atop工具包中的一个非交互式的命令行工具,用于从atop记录的二进制日志文件中提取数据并生成系统性能报告。
使用示例
- 查看当前系统在 1 分钟内(12 次,间隔 5 秒) 的CPU使用率指标报告。
atopsar -c 5 12
- 查看当天指定时间段的内存指标报告。
# 查看当天18:00至18:01的内存指标报告
atopsar -m -b 18:00 -e 18:01
- 查看指定日期内,指定时间段的内存指标报告。
# 查看2025年8月15日 18:00至18:01的内存指标报告。
atopsar -m -r /var/log/atop/atop_20250815 -b 18:00 -e 18:01
atopsar命令基本语法
atopsar [options] [interval] [count]
- [options]:用于指定报告类型的标志,例如
-c(CPU),-m(内存),-d(磁盘)。 - [interval]:指定输出报告的时间间隔,单位为秒。
- [count]:指定输出报告的次数。
指标解读
系统资源概览
| 指标类别 | 指标 | 详细说明 | 单位 |
|---|---|---|---|
| ATOP | 主机名, 日期 | 显示当前主机名、采样日期和时间。 | - |
| 采样间隔 | 显示两次采样之间的时间间隔。 | 秒 | |
| PRC(进程总体情况) | sys | 在采样间隔内,所有进程在内核模式下消耗的CPU总时间。 | 秒 |
| user | 在采样间隔内,所有进程在用户模式下消耗的CPU总时间。 | 秒 | |
| #proc | 系统当前的总进程数量。 | 个 | |
| #trun | 处于运行中状态的平均线程数。 | 个 | |
| #tslpi | 处于可中断睡眠状态的线程数。 | 个 | |
| #tslpu | 处于不可中断睡眠状态的线程数。 | 个 | |
| #zombie | 僵尸进程的数量。 | 个 | |
| clones | 在采样间隔内,通过clone系统调用创建的新进程/线程数。 | 个/秒 | |
| #exit | 在采样间隔内,退出的进程数量。 | 个/秒 | |
| CPU/cpu(CPU整体/单个CPU核心) | sys% | CPU在内核模式下花费的时间百分比。 | % |
| user% | CPU在用户模式下花费的时间百分比。 | % | |
| irq% | CPU处理硬件中断(irq)和软件中断(softirq)的时间百分比。 | % | |
| idle% | CPU处于完全空闲状态的时间百分比。 | % | |
| wait% | CPU因等待磁盘I/O完成而处于空闲状态的时间百分比。 | % | |
| steal% | 虚拟CPU等待物理CPU时间的百分比(被宿主机或其他虚拟机占用的时间)。 | % | |
| guest% | 运行虚拟机所花费的CPU时间的百分比。 | % | |
| freq% | CPU的平均运行频率,相对于其最大频率的百分比。 | % | |
| CPL(CPU负载) | avg1/avg5/avg15 | 过去1分钟/5分钟/15分钟的系统平均负载。 | - |
| csw | 在采样间隔内,上下文切换的次数。 | 次/秒 | |
| intr | 在采样间隔内,发生的中断总次数。 | 次/秒 | |
| MEM(物理内存) | tot | 系统物理内存总量。 | GiB/MiB |
| free | 完全未被使用的空闲内存量。 | GiB/MiB | |
| cache | 用作页面缓存的内存量,用于缓存文件数据。 | GiB/MiB | |
| dirty | 在页面缓存中,已被修改但尚未写回磁盘的脏页大小。 | MiB | |
| buff | 用作缓冲区缓存的内存量,用于缓存块设备元数据。 | MiB | |
| slab | 内核用于自身数据结构(slab分配器)的内存量。 | MiB | |
| shmem | 共享内存(包括tmpfs)的大小。 | MiB | |
| vmbal | (仅限32位系统)用于虚拟内存区域的平衡内存量。 | MiB | |
| SWP(交换分区) | tot | 交换分区的总大小。 | GiB/MiB |
| free | 空闲的交换分区大小。 | GiB/MiB | |
| swcac | 已被换出但同时又被缓存的内存大小。 | MiB | |
| vmcom | 已被应用程序申请的虚拟内存总量。 | GiB/MiB | |
| vmlim | 允许申请的虚拟内存上限。 | GiB/MiB | |
| PAG(分页活动) | scan | 内核在采样间隔内为回收内存而扫描的页数。 | 页/秒 |
| steal | 内核在扫描后成功回收的页数。 | 页/秒 | |
| stall | 内核因内存不足而停滞以等待页面回收的次数。 | 次/秒 | |
| swin | 从交换分区换入到物理内存的页面数。 | 页/秒 | |
| swout | 从物理内存换出到交换分区的页面 数。 | 页/秒 | |
| DSK(磁盘)LVM(逻辑卷) | busy | 磁盘繁忙的时间百分比。达到100%表示磁盘饱和。 | % |
| read/write | 在采样间隔内,完成的读/写请求数量。 | 个/秒 | |
| KiB/r/KiB/w | 每个读/写请求的平均数据大小。 | KB | |
| Msec/r/Msec/w | 每个读/写请求的平均耗时(包括排队和服务时间)。 | 毫秒 | |
| avio | 平均I/O请求的服务时间(不含排队时间)。 | 毫秒 | |
| NET(网络) | transport | TCP和UDP层的收发包统计。 | 包/秒 |
| network | IP层的收发包、转发包统计。 | 包/秒 | |
| if | 显示每个网络接口的活动情况。 | - | |
| pcki/pcko | 接口接收/发送的数据包数量。 | 包/秒 | |
| spdi/spdo | 接口接收/发送的速率。 | Mbps | |
| erri/erro | 接口接收/发送时发生的错误数。 | 个/秒 | |
| drpi/drpo | 接口接收/发送时丢弃的数据包数。 | 个/秒 |
进程级详情
| 视图 | 指标 | 详细说明 | 单位 |
|---|---|---|---|
| 通用视图(默认) | PID | 进程ID。系统的唯一进程标识符。 | - |
| S | 进程状态。R-运行中, S-可中断睡眠, D-不可中断睡眠, Z-僵尸, E-已退出。 | - | |
| CPU% | CPU使用率。 | % | |
| MEM% |