文档首页/ 弹性云服务器 ECS/ 故障排除/ 操作系统类(Linux)/ 怎样配置Linux分析工具:atop和kdump
更新时间:2024-08-15 GMT+08:00

怎样配置Linux分析工具:atop和kdump

atop简介

atop是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,可获取相应的atop日志文件进行分析。

atop安装前准备

  • 云服务器已绑定弹性公网IP。
  • 云服务器可以访问yum软件源。

CentOS 7/8、AlmaLinux、 Rocky Linux系列操作系统配置atop

  1. 执行以下命令,安装atop。

    yum install -y atop

  2. 编辑配置文件,修改采样周期。

    vi /etc/sysconfig/atop

    修改如下配置参数,修改后保存并退出。

    • LOGINTERVAL默认是600,可以修改成15,单位秒。
    • 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
      LOGINTERVAL=15
      LOGGENERATIONS=3 
  1. 启动atop服务。

    systemctl start atop

  2. 检查是否启动成功,active(running) 表示运行正常。

    systemctl status atop

    atop.service - Atop advanced performance monitor 
     Loaded: loaded (/usr/lib/systemd/system/atop.service; enabled; vendor preset: disabled) 
     Active: active (running) since Sat 2024-03-6 11:49:47 CST; 2h 27min ago 

CentOS 6系列操作系统配置atop

  1. 执行以下命令,安装atop。

    yum install -y atop

  2. 编辑配置文件,修改采样周期。

    vi /etc/sysconfig/atop

    修改如下配置参数,修改后保存并退出。

    LOGINTERVAL默认是600,可以修改成15,单位秒。

    LOGINTERVAL=15

    vi /etc/logrotate.d/atop

    修改如下配置参数,修改后保存并退出。

    默认atop日志保存周期为40天,可以根据实际修改“-mtime”的值为3,单位为天。

        postrotate
          /usr/bin/find /var/log/atop/ -maxdepth 1 -mount -name atop_\[0-9\]\[0-9\]\[0-9\]\[0-9\]\[0-9\]\[0-9\]\[0-9\]\[0-9\]\* -mtime +3 -exec /bin/rm {} \;
        endscript
  3. 启动atop服务。

    service atop start

  4. 检查是否启动成功,is running 表示运行正常。

    service atop status

    atop (pid 3170) is running

Ubuntu 20/22、Debian 10/11系列操作系统配置atop

  1. 执行以下命令,安装atop。

    apt-get install -y atop

  2. 编辑配置文件,修改采样周期。

    vi /etc/default/atop

    修改如下配置参数,修改后保存并退出。

    • LOGINTERVAL默认是600,可以修改成15,单位秒。
    • 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
      LOGINTERVAL=15
      LOGGENERATIONS=3 
  1. 启动atop服务。

    systemctl start atop

  2. 检查是否启动成功,active(running) 表示运行正常。

    systemctl status atop

    atop.service - Atop advanced performance monitor 
     Loaded: loaded (/etc/init.d/atop; bad; vendor preset: disabled) 
     Active: active (running) since Sat 2024-03-11 14:09:47 CST; 16s ago

Ubuntu 18、Debian 8/9系列操作系统配置atop

  1. 执行以下命令,安装atop。

    apt-get install -y atop

  2. 编辑配置文件,修改采样周期。

    vi /usr/share/atop/atop.daily

    修改如下配置参数,修改后保存并退出。

    • LOGINTERVAL默认是600,可以修改成15,单位秒。
    • 默认atop日志保存周期为28天,可以根据实际修改“-mtime”的值为3,单位为天。
      LOGINTERVAL=15
      ……
      ( (sleep 3; find $LOGPATH -name 'atop_*' -mtime +3 -exec rm {} \;)& ) 
  1. 启动atop服务。

    systemctl start atop

  2. 检查是否启动成功,active(running) 表示运行正常。

    systemctl status atop

    atop.service - Atop advanced performance monitor 
     Loaded: loaded (/etc/init.d/atop; bad; vendor preset: disabled) 
     Active: active (running) since Sat 2024-03-6 14:09:47 CST; 15s ago 

Ubuntu 16系列操作系统配置atop

  1. 执行以下命令,安装atop。

    apt-get install -y atop

  2. 编辑配置文件,修改采样周期。

    vi /etc/default/atop

    修改如下配置参数,修改后保存并退出。

    • LOGINTERVAL默认是600,可以修改成15,单位秒。
    • 默认atop日志保存周期为28天,不支持修改。
      LOGINTERVAL=15
  1. 启动atop服务。

    systemctl start atop

  2. 检查是否启动成功,active(running) 表示运行正常。

    systemctl status atop

    atop.service - LSB: Monitor for system resources and process activity
       Loaded: loaded (/etc/init.d/atop; bad; vendor preset: enabled)
       Active: active (running) since Mon 2024-04-29 19:33:22 CST; 38s ago

SUSE 15、SUSE 12系列操作系统配置atop

  1. 下载atop源码安装包。

    wget https://www.atoptool.nl/download/atop-2.6.0-1.src.rpm

  2. 执行以下命令安装源码atop。

    rpm -ivh atop-2.6.0-1.src.rpm

  3. 安装编译atop依赖软件包

    zypper -n install rpm-build ncurses-devel zlib-devel

  4. 执行以下命令编译atop

    cd /usr/src/packages/SPECS

    rpmbuild -bb atop-2.6.0.spec

  5. 执行以下命令安装atop

    cd /usr/src/packages/RPMS/x86_64

    rpm -ivh atop-2.6.0-1.x86_64.rpm

  6. 编辑配置文件,修改采样周期。

    vi /etc/default/atop

    修改如下配置参数,修改后保存并退出。

    • LOGINTERVAL默认是600,可以修改成15,单位秒。
    • 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
    LOGINTERVAL=15
    LOGGENERATIONS=3 
  1. 重启atop服务。

    systemctl restart atop

  2. 检查是否启动成功,active(running) 表示运行正常。

    systemctl status atop

    atop.service - Atop advanced performance monitor 
     Loaded: loaded (/usr/lib/systemd/system/atop.service; enabled; vendor preset: disabled) 
     Active: active (running) since Sat 2021-06-19 16:50:01 CST; 6s ago

使用源码方式安装(适用于CentOS Stream 9、openEuler、EulerOS等系列操作系统)

  1. 下载atop源码。

    wget https://www.atoptool.nl/download/atop-2.6.0.tar.gz

  1. 执行以下命令解压源码atop。

    tar -zxvf atop-2.6.0.tar.gz

  2. 执行以下命令查看systemctl版本。

    systemctl --version

    如果版本大于等于220,直接进行下一步。

    否则需要修改atop的Makefile文件,删除--now参数。

    vi atop-2.6.0/Makefile

    删除systemctl命令后的--now参数

                    then   /bin/systemctl disable  atop     2> /dev/null; \
                            /bin/systemctl disable  atopacct 2> /dev/null; \
                            /bin/systemctl daemon-reload;                   \
                            /bin/systemctl enable   atopacct;          \
                            /bin/systemctl enable   atop;              \
                            /bin/systemctl enable   atop-rotate.timer; \
  3. 安装编译atop依赖软件包。
    • SUSE12、SUSE15系列操作系统执行以下命令安装:

      zypper -n install make gcc zlib-devel ncurses-devel

    • EulerOS、Fedora系列操作系统执行以下命令安装:

      yum install make gcc zlib-devel ncurses-devel -y

    • Debian9、Debian10、Ubuntu系列操作系统执行以下命令安装:

      apt install make gcc zlib1g-dev libncurses5-dev libncursesw5-dev -y

  4. 执行以下命令编译并安装atop。

    cd atop-2.6.0

    make systemdinstall

  5. 编辑配置文件,修改采样周期。

    vi /etc/default/atop

    添加如下配置参数,修改后保存并退出。

    • LOGINTERVAL默认是600,可以修改成15,单位秒。
    • 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
      LOGOPTS=""
      LOGINTERVAL=15
      LOGGENERATIONS=3
      LOGPATH=/var/log/atop 
  1. 重启atop服务。

    systemctl restart atop

  2. 检查是否启动成功,active(running) 表示运行正常。

    systemctl status atop

    atop.service - Atop advanced performance monitor    Loaded: loaded(/lib/systemd/system/atop.service; enabled)    Active: active (running) since Sun2021-07-25 19:29:40 CST; 4s ago .

分析atop日志

atop启动后,会将采集记录存放在/var/log/atop目录下的日志文件中。

执行如下命令,查看日志文件。

atop -r /var/log/atop/atop_2024XXXX

  • atop常用命令
    打开日志文件后,您可以使用以下命令筛选数据。
    • c:按照进程CPU使用率进行降序筛选。
    • m:按照进程内存使用率进行降序筛选。
    • d:按照进程磁盘使用率进行降序筛选。
    • a:按照进程资源综合使用率进行降序筛选。
    • n:按照进程网络使用率进行降序筛选。
    • t:跳转到下一个监控采集点。
    • T:跳转到上一个监控采集点。
    • b:指定时间点,格式为YYYYMMDDhhmm。
  • 系统资源监控字段含义

    下图为部分监控字段以及数值,具体数值根据采样周期和atop版本有所不同。下图仅供参考,具体数据以您实际数据为准。

    图1 系统资源监控字段
    主要参数说明如下:
    • ATOP 行:主机名、信息采样日期和时间点。
    • PRC 行:进程整体运行情况。
    • #sys 及 user:内核态和用户态所占 CPU 的时间值。
    • #proc:进程总数。
    • #zombie:僵死进程的数量。
    • #exit:采样周期期间退出的进程数量。
    • CPU 行:CPU 整体(即多核 CPU 作为一个整体 CPU 资源)的使用情况。CPU 行的各字段数值相加结果为 N*100%,N 为 CPU 核数。
    • #sys 及 user:内核态和用户态所占 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:空闲交换空间大小。
    • DSK 行:磁盘使用情况,每一个磁盘设备对应一列。如果有 sdb 设备,那么增加一行 DSK 信息。
    • #sda:磁盘设备标识。
    • #busy:磁盘忙时比例。
    • #read 及 write:读、写请求数量。
    • NET 行:多列 NET 展示了网络状况,包括传输层(TCP 和 UDP)、IP 层以及各活动的网口信息。
    • #xxxxxi:各层或活动网口收包数目。
    • #xxxxxo:各层或活动网口发包数目。
  • 停止 atop

    atop运行会占用额外的系统和磁盘资源,不建议在业务环境下长期运行,您可在问题排查完成后,执行以下命令停止atop。

    systemctl stop atop

    CentOS 6执行以下命令停止atop。

    service atop stop

配置kdump使用须知

配置kdump的操作适用于EulerOS以及CentOS 7系列Linux产品, 且云服务器的虚拟化类型为KVM。了解更多

kdump简介

kdump是系统崩溃的时候,用来转储运行内存的一个工具。系统一旦崩溃,内核就无法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核,该内核会将此时内存中的所有运行状态和数据信息收集到一个dump core文件中以便之后分析崩溃原因。

配置kdump操作步骤

  1. 查看是否已经安装kexec-tools。

    rpm -q kexec-tools

    如果没有安装,则执行下面命令安装。

    yum install -y kexec-tools

  2. 开启kdump默认启动。

    systemctl enable kdump

  3. 设置craskkernel参数,设置这个参数的目的是预留内存给capture kernel。

    首先查看参数是否已经设置。

    grep crashkernel /proc/cmdline

    如果有显示,则表示已经设置,如果没有显示,则需要重新设置。

    设置crashkernel,编辑/etc/default/grub文件。
    GRUB_TIMEOUT=5
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel00/root rd.lvm.lv=rhel00/swap
    rhgb quiet"
    GRUB_DISABLE_RECOVERY="true"

    找到GRUB_CMDLINE_LINUX参数,添加crashkernel=auto,其他内容不变。

  4. 执行grub命令,使以上配置生效。

    grub2-mkconfig -o /boot/grub2/grub.cfg

  5. 打开/etc/kdump.conf文件中找到“path”参数,添加以下内容。
    path  /var/crash

    默认是保存在/var/crash目录下,如果要保存到其他目录,则改成对应的目录,

    例如保存在/home/kdump下,则改成:
    path  /home/kdump

    要确保指定的路径有足够的空间保存vmcore,建议剩余空间不小于RAM大小;也可以保存在SAN,nfs等共享设备上。

  6. 设置转存vmcore级别。

    修改/etc/kdump.conf文件,添加如下参数,如果存在则无需添加。

    core_collector makedumpfile -d 31 -c

    -c表示压缩vmcore文件,

    -d表示过滤掉部分无效的内存数据,可以根据需要调整,一般31即可,31是由如下的值与计算而成。

    zero pages   = 1
    cache pages   = 2
    cache private = 4
    user  pages   = 8
    free  pages   = 16
  7. 执行如下命令重启系统,使以上配置生效。

    reboot

检查kdump配置是否生效

  1. 执行以下命令,确认回显信息中crashkernel=auto

    cat /proc/cmdline |grep crashkernel

    BOOT_IMAGE=/boot/vmlinuz-3.10.0-514.44.5.10.h142.x86_64 root=UUID=6407d6ac-c761-43cc-a9dd-1383de3fc995 ro crash_kexec_post_notifiers softlockup_panic=1 panic=3 reserve_kbox_mem=16M nmi_watchdog=1 rd.shell=0 fsck.mode=auto fsck.repair=yes net.ifnames=0 spectre_v2=off nopti noibrs noibpb crashkernel=auto LANG=en_US.UTF-8
  2. 执行以下命令,并确认回显信息中的配置信息正确。

    grep core_collector /etc/kdump.conf |grep -v ^"#"

    core_collector makedumpfile -l --message-level 1 -d 31
  3. 执行以下命令,并确认回显信息中的配置信息正确。

    grep path /etc/kdump.conf |grep -v ^"#"

    path /var/crash
  4. 执行以下命令,并确认回显信息中的Active的状态为active (exited)。

    systemctl status kdump

    ● kdump.service - Crash recovery kernel arming
    Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
    Active: active (exited) since Tue 2019-04-09 19:30:24 CST; 8min ago
    Process: 495 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
    Main PID: 495 (code=exited, status=0/SUCCESS)
    CGroup: /system.slice/system-hostos.slice/kdump.service
  5. 执行测试命令。

    echo c > /proc/sysrq-trigger

    这会触发kdump,重新启动,并将生成的vmcore文件保存的path参数指定的位置。

  6. 检查vmcore是否生成。

    到所在环境path参数所指定的路径查看是否有vmcore文件生成,例如/var/crash/目录。

    ll /var/crash/

    可以看到生成了一个文件夹,里面有vmcore文件。