安装、配置并使用atop监控工具

atop是一款用于监控Linux系统资源与进程的工具,能够报告所有进程的活动。它以一定频率记录系统和进程的活动。当ECS实例出现问题时,您可以获取相应的atop日志文件进行分析。本文将介绍如何在Linux实例中安装、使用及自定义atop配置。

atop工具介绍

atop采集的数据涵盖了CPU、内存、磁盘和网络的资源使用情况以及进程运行状态,并能够以日志文件的形式保存至磁盘。对于每个进程,系统将显示CPU使用率、内存增长、磁盘使用率、优先级、用户名、状态及退出码等信息。您可以通过atop配置文件自定义日志采集的频率、日志文件的存储路径以及轮转策略等参数。

安装atop工具

Alibaba Cloud Linux 3/2

本步骤以Alibaba Cloud Linux操作系统的ECS实例为例,为您介绍如何安装atop监控工具。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,安装atop。

    sudo yum install -y atop
  3. 执行如下命令,启动atop服务。

    sudo systemctl start atop

CentOS 7/8

本步骤以CentOS操作系统的ECS实例为例,为您介绍如何安装atop监控工具。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,安装atop。

    sudo yum install -y atop
  3. 执行如下命令,启动atop服务。

    sudo systemctl start atop

Fedora

本步骤以Fedora操作系统的ECS实例为例,为您介绍如何安装atop监控工具。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,安装atop。

    sudo yum install -y atop
  3. 执行如下命令,启动atop服务。

    sudo systemctl start atop

Ubuntu / Debian

本步骤以Ubuntu/Debian操作系统的ECS实例为例,为您介绍如何安装atop监控工具。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 更新软件源中的所有软件列表。

    sudo apt update 
  3. 执行如下命令,安装atop。

    sudo apt install -y atop
  4. 执行如下命令,启动atop服务。

    sudo systemctl start atop

openSUSE

本步骤以openSUSE操作系统的ECS实例为例,为您介绍如何安装atop监控工具。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,安装atop。

    sudo zypper install -y atop atop-daemon
  3. 执行如下命令,启动atop服务。

    sudo systemctl start atop

使用atop工具

使用atop工具进行Linux系统指标监控时,您需要关注常用命令及资源监控字段的含义。有关详细内容,可点击下方进行了解。

常用命令介绍

打开日志文件后,您可以在交互命令模式下使用以下命令。

  • g:切换回默认的综合输出视图。

  • c:显示进程列完整命令行。

  • m:按照进程内存使用率进行降序筛选。

  • d:按照进程磁盘使用率进行降序筛选。

  • a:按照进程资源综合使用率进行降序筛选。

  • n:按照进程网络使用率进行降序筛选。

  • t:跳转到下一个监控采集点。

  • T:跳转到上一个监控采集点。

  • b:指定时间点,格式为YYYYMMDDhhmm。

资源监控字段含义介绍

下图展示了部分监控字段及其数值,具体数值会因采样周期的不同而有所变化。该图仅供参考,具体数据应以您的实际数据为准。

2023-04-03_17-30-42

主要参数说明如下:

参数(行)

说明

ATOP

主机名、信息采样日期和时间点。

PRC

进程整体运行情况。

  • sys、user:分别代表进程在内核态和用户态的运行时间。

  • #proc:进程总数。

  • #trun:处于running状态进程数。

  • #tslpi:处于sleeping interruptible状态的进程数。

  • #tslpu:处于sleeping uninterruptible状态的进程数。

  • #zombie:僵死进程的数量。

  • #exit:atop采样周期内退出的进程数。

CPU

CPU整体的使用情况,即多核CPU作为一个整体CPU资源的使用情况。CPU行各个字段数字相加结果为N*100%,其中N为CPU的核数。

  • sys、user:CPU在用于处理进程时,进程在内核态及用户态所占CPU的时间比例。

  • irq:CPU用于处理中断的时间比例。

  • idle:CPU处在完全空闲状态的时间比例。

  • wait:CPU处在进程等待磁盘IO导致CPU空闲状态的时间比例。

CPL

CPU负载情况。

  • avg1、avg5和avg15:分别代表过去1分钟、5分钟和15分钟内运行队列中的平均进程数量。

  • csw:上下文切换次数。

  • intr:中断发生次数。

MEM

内存的使用情况。

  • tot:物理内存总量。

  • free:空闲内存的大小。

  • cache:用于页缓存的内存大小。

  • buff:用于文件缓存的内存大小。

  • slab:系统内核占用的内存大小。

SWP

交换空间的使用情况。

  • tot:交换区总量。

  • free:空闲交换空间大小。

PAG

虚拟内存分页情况。

swin、swout:分别代表换入和换出内存页数。

DSK

磁盘使用情况,每一个磁盘设备对应一列,如果有vdb设备,那么将会增加一行DSK信息。

  • vda:磁盘设备标识。

  • busy:磁盘处于busy状态的时间比例。

  • read、write:分别代表读、写请求数量。

NET

多列NET展示了网络状况,包括传输层TCP和UDP、IP层以及各活动的网口信息。

  • ****i:各层或活动网口接收包大小。

  • ****o:各层或活动网口发送包大小。

重要

当您在命令行界面运行atop命令时,默认会进入交互命令模式,在交互命令模式下,您可以通过在键盘输入支持的命令进行数据筛选,例如,按m键切换为内存信息视图。按q退出交互命令模式。有关支持的命令列表,请参见常用命令介绍。您也可以在交互命令模式下按?获取更多信息。

查看实时系统指标

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

    atop 5
  • 查看当前时间之后5分钟内(共30次,间隔10秒)的系统指标。

    atop -M 10 30
  • 查看当前时间之后10分钟(10 次,间隔 60 秒)的系统指标,并将结果写入文件。

    atop -M 60 10 > /log/atop.mem

查看历史指标日志

atop启动后,会默认将采集记录存放在/var/log/atop目录下的日志文件中。您可以通过执行如下命令,查看相关历史指标日志。

说明

使用atop查看历史指标日志时,请确保您所指定日期的历史指标日志已存在于atop日志文件路径中,若文件不存在会出现stat raw file: No such file or directory报错。

  • 查看当天历史指标日志。

    atop -r 
  • 查看昨天历史指标日志。

    atop -r y
  • 查看指定日期内的历史指标日志。示例中,指定日期为2024年11月06日。

    atop -r 20241106
  • 查看指定日期内自指定时间起的历史指标日志。示例中,指定日期为2024年11月06日,开始时间为14:00。

    atop -r 20241106 -b 14:00
  • 查看指定日期内,指定时间段的历史指标日志。示例中,指定的日期为2024年11月5日,时间段为00:04至00:08。

    atop -r 20241105 -b 00:04 -e 00:08

查看系统活动报告

  • 查看当前系统在 1 分钟内(12 次,间隔 5 秒)的CPU利用率报告。

    atopsar -c 5 12
  • 查看当天指定时间段的内存指标报告。示例中,时间段为18:00至18:01。

    atopsar -m -b 18:00 -e 18:01
  • 查看指定日期内,指定时间段的内存指标报告。示例中,指定的日期为2024年11月5日,时间段为18:00至18:01。

    atopsar -c -r 20241105 -b 18:00 -e 18:01

配置atop工具

自定义atop监控周期及日志保留时间

您可以参考以下步骤,以完成自定义 atop 监控周期、日志保留时间及日志存储路径的设置。有关配置文件的更多信息,可点击下方进行了解。

配置文件介绍

在Alibaba Cloud Linux 3/2、CentOS 7/8和Fedora系统中,atop的配置文件是/etc/sysconfig/atop。而在Ubuntu、Debian和openSUSE系统中,配置文件是/etc/default/atop。默认配置文件的内容如下所示:

LOGOPTS=""
LOGINTERVAL=600
LOGGENERATIONS=28
LOGPATH=/var/log/atop

有关配置文件的说明如下:

  • LOGOPTS:用于控制日志文件记录选项的一个重要参数,允许您自定义日志文件的保存路径、命名规则、滚动周期以及其他与日志记录相关的选项。默认为空,表示不使用任何额外选项。

  • LOGINTERVAL:监控周期,默认的监控周期为600秒。

  • LOGGENERATIONS:日志保留时间,为避免atop长时间运行占用太多磁盘空间,默认的日志保留时间为28天。

  • LOGPATH:指定atop日志文件的路径。默认值为/var/log/atop。

  1. 配置atop监控周期和日志保留时间。

    1. 执行如下命令,打开atop配置文件。

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

      sudo vim /etc/sysconfig/atop

      Ubuntu、Debian、openSUSE

      sudo vim /etc/default/atop
    2. i进入编辑模式。

    3. 根据自身需求调整监控周期、日志保留时间及日志存储路径配置。示例中将监控周期修改为30秒,日志保留时间设定为10天,而日志路径则维持默认设置。

      LOGOPTS=""
      LOGINTERVAL=30
      LOGGENERATIONS=7
      LOGPATH=/var/log/atop
      重要
      • 设置较小的监控周期可以使监控时间的颗粒度更细,但同时会增加系统的I/O负担,并导致生成的日志文件变大。若您在生产环境中使用atop,请根据自身需求合理设置,避免日志文件过大或日志记录占用过多I/O资源,从而影响实际业务的正常运行。

      • 日志保留时间越长,意味着您能够查看更早时间的历史日志。然而,这也将占用更多的磁盘空间,因此请根据自身需求进行合理设置。

    4. Esc键,输入:wq,保存并退出编辑。

  2. 执行如下命令,重启atop服务。

    sudo systemctl restart atop

其他操作

配置天级别日志轮转策略

您可以参考以下步骤,为atop配置按天轮转日志策略,从而实现每天生成一个atop指标日志文件。

  1. (条件可选)根据自身需求调整监控周期、日志保留时间及日志存储路径配置,相关操作,请参见自定义atop监控周期及日志保留时间

  2. 执行如下命令,将每日日志轮转相关服务设置为开机启动并启动服务。

    sudo systemctl enable --now atop atopacct atop-rotate.timer
说明

以上示例设置为每天生成一个日志文件,如果您的业务需要对日志进行更加复杂的处理,您可以结合logrotate或自定义脚本等方式实现日志管理。

加载可选的netatop内核模块

如需监测网络使用率,可安装网络监控模块netatop。本示例以Alibaba Cloud Linux 3系统为例,为您展示如何为atop加载可选的netatop内核模块。

说明

netatop能够监测每个进程或线程发送和接收的TCP及UDP数据包统计信息。在atopnetatop并未默认安装。如果您需要在其他Linux发行版加载可选的netatop内核模块,请参考atop官方手册进行安装。更多内容,请参见Module 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 --no-check-certificate
  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