使用atop工具监控Linux系统指标

安装atop

Alibaba Cloud Linux 3/2、CentOS 7/8、Fedora

放大查看复制代码

# 更新软件包
sudo yum update -y

# 安装 atop
sudo yum install atop -y

Ubuntu / Debian

放大查看复制代码

# 更新软件包
sudo apt update -y

# 安装 atop
sudo apt install atop -y

CentOS Stream 9、Rocky Linux 9

放大查看复制代码

# 更新软件包
sudo dnf update -y

# 安装 EPEL 源
sudo dnf install epel-release -y

# 安装 atop
sudo dnf install atop -y

openSUSE

放大查看复制代码

# 更新软件包
sudo zypper update -y

# 安装 atop
sudo zypper install atop atop-daemon -y
  1. 启动 atop 服务。

    放大查看复制代码

    sudo systemctl start atop
  2. 验证atop是否启动成功。

    执行sudo systemctl status atop查看服务状态,若回执信息包含active(running),表示启动成功。

使用atop查看实时指标

  1. 执行atop [采样间隔秒数] [采样次数]命令进入交互模式。

    放大查看复制代码

    # 以默认配置查看(10秒刷新一次)。
    atop

    # 每5秒查看一次系统指标。
    atop 5

    # 以10秒为间隔,采集30次系统指标。
    atop 10 30

    # 以30秒为间隔,采集10次,并结果写入文件。
    atop 30 10 > /tmp/atop.mem
    • 系统资源概览:汇总了CPU、内存、交换空间、磁盘I/O和网络的整体使用情况。

      image

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

      image

  2. 在交互模式下,可使用单个字母键切换视图或者排序。

    放大查看

    按键 功能 用途
    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 的日志是二进制文件,使用catlessvim等文本编辑器打开会显示乱码。

读取历史日志

  1. 读取历史日志文件。

    使用atop -r <日志文件>命令加载指定的日志文件。

    放大查看复制代码

    # 查看当天的日志,atop会自动查找当天的日志文件
    atop -r

    # 查看指定日期的日志
    atop -r /var/log/atop/atop_YYYYMMDD
  2. 在日志中跳转到指定时间点。

    加载日志后,界面显示的是该日志文件的第一个时间点快照。

    1. 按 t 键:向后跳转到下一个时间点的快照。

    2. 按 T 键(大写):向前跳转到上一个时间点的快照。

    3. 按 b 键:输入具体时间(格式 HH:MM),直接跳转到该时间点。

优化 atop 日志记录行为

在分析历史日志时,若发现默认的日志记录频率(10分钟一次)对于某些问题来说太过宽泛,或者默认的28天保留时长不能满足监控需求,可通过修改 atop 的配置文件来调整其后台日志的记录频率、保留天数和存储路径。

  1. 使用vim或其他文本编辑器打开配置文件。

    • RHEL 及其衍生版(Alibaba Cloud Linux,CentOS,Fedora,Rocky Linux)。

      放大查看复制代码

      sudo vim /etc/sysconfig/atop
    • Debian 及其衍生版(Ubuntu, Debian),openSUSE。

      放大查看复制代码

      sudo vim /etc/default/atop
  2. 默认配置文件的内容如下:

    放大查看复制代码

    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 进程有写入权限。

  3. 配置修改后,需重启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% 内存使用率。 %  
THR 线程数。  
PAG 主要缺页错误。表示进程需要从磁盘读取数据到内存的次数,是衡量磁盘I/O压力的一个指标。 次/秒  
CMD 命令名。进程的可执行文件名。按 c 键后会显示完整命令行。 -  
内存视图 VSIZE 虚拟内存大小。进程向系统申请的虚拟地址空间总大小。 KiB/MiB/GiB
RSIZE 常驻内存大小。进程当前实际占用物理内存的大小。 KiB/MiB/GiB  
SHR 共享内存大小。 KiB/MiB/GiB  
RGROW 常驻内存增长量。正数表示内存消耗在增加,负数表示在减少。 KiB  
VGROW 虚拟内存增长量。 KiB  
磁盘视图 DSK% 磁盘活动百分比。进程产生的磁盘I/O繁忙时间占总磁盘繁忙时间的百分比。 %
RDDSK/WRDSK 读取/写入的磁盘数据。 KiB/MB  
WCANCL 取消的写入量。进程写入页面缓存后,在数据被同步到磁盘前又被删除的数据量。 KiB/MB  
网络视图 NET% 网络活动百分比。进程产生的网络流量占所有进程总流量的百分比。 %
TCPSND/TCPRCV TCP发送/接收量。 KiB/MB  
UDPSND/UDPRCV UDP发送/接收量。 KiB/MB  

应用于生产环境

  • 磁盘空间规划atop日志大小与采集频率、系统进程数和保留天数正相关。通过ls -lh /var/log/atop/命令观察单个日志文件的大小,然后乘以LOGGENERATIONS的值来估算总空间需求。

  • 监控间隔:对于需要更细粒度分析的场景,可将默认配置LOGINTERVAL调整为30秒。但请注意,缩短间隔会增加磁盘 I/O 和 atop 进程的 CPU 开销,请根据实例负载合理配置。

常见问题

  1. 执行 **atop -r** 时提示 **stat raw file: No such file or directory**,是什么原因?

    这个错误表示atop找不到指定日期的日志文件。可能的原因有:

    1. 指定的日期atop服务并未运行。

    2. 日志文件因轮转策略已被删除(超过了LOGGENERATIONS设置的保留数量)。

    3. 查询的是未来的日期。

      请检查/var/log/atop目录下实际存在的日志文件列表。

  2. 如何减少**atop**占用的磁盘空间?

    可通过修改配置减少磁盘空间占用,修改配置后,需重启atop服务:

    1. 减少日志保留天数:在配置文件中调低LOGGENERATIONS的值,例如从28改为14

    2. 降低采集频率:在配置文件中调高LOGINTERVAL的值,例如从600改为1200

  3. 为什么在 **atop** 交互界面按 **n** 键看不到按进程统计的网络流量?

    atop默认不包含按进程统计网络流量的功能。要启用此功能,需要额外安装并加载netatop内核模块。

    1. 安装内核开发包及编译所需软件环境。

      放大查看复制代码

      sudo yum install -y kernel-devel dkms elfutils-libelf-devel
    2. 下载netatop源码至指定目录。

      放大查看复制代码

      cd /usr/src/ && sudo wget https://www.atoptool.nl/download/netatop-3.2.2.tar.gz
    3. 解压源码并进入源码目录。

      放大查看复制代码

      sudo tar -zxvf netatop-3.2.2.tar.gz && cd netatop-3.2.2
    4. 基于源码构建并安装模块和守护程序。

      放大查看复制代码

      sudo make && sudo make install
    5. 启动netatop服务。

      放大查看复制代码

      sudo systemctl start netatop
    6. 验证netatop是否安装成功。

      执行atop进入交互操作界面,按n键查看,若进程详情列表中包含NET列,表示安装成功。