怎样配置Linux分析工具:atop和kdump
操作场景
本节操作介绍atop和kdump的配置方法。
不同的Linux版本使用的atop工具版本不同,因此配置方法稍微有所不同。
配置atop:
- atop简介
- atop安装前准备
- CentOS 7/8、AlmaLinux、 Rocky Linux系列操作系统配置atop
- CentOS 6系列操作系统配置atop
- Ubuntu 20/22、Debian 10/11系列操作系统配置atop
- Ubuntu 18、Debian 8/9系列操作系统配置atop
- Ubuntu 16系列操作系统配置atop
- SUSE 15、SUSE 12系列操作系统配置atop
- 使用源码方式安装(适用于CentOS Stream 9、openEuler、EulerOS等系列操作系统)
- 分析atop日志
配置kdump:
atop简介
atop是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,可获取相应的atop日志文件进行分析。
CentOS 7/8、AlmaLinux、 Rocky Linux系列操作系统配置atop
- 执行以下命令,安装atop。
- 编辑配置文件,修改采样周期。
修改如下配置参数,修改后保存并退出。
- LOGINTERVAL默认是600,可以修改成15,单位秒。
- 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
LOGINTERVAL=15 LOGGENERATIONS=3
CentOS 6系列操作系统配置atop
- 执行以下命令,安装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
- 启动atop服务。
- 检查是否启动成功,is running 表示运行正常。
atop (pid 3170) is running
Ubuntu 20/22、Debian 10/11系列操作系统配置atop
- 执行以下命令,安装atop。
- 编辑配置文件,修改采样周期。
修改如下配置参数,修改后保存并退出。
- LOGINTERVAL默认是600,可以修改成15,单位秒。
- 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
LOGINTERVAL=15 LOGGENERATIONS=3
Ubuntu 18、Debian 8/9系列操作系统配置atop
- 执行以下命令,安装atop。
- 编辑配置文件,修改采样周期。
修改如下配置参数,修改后保存并退出。
- LOGINTERVAL默认是600,可以修改成15,单位秒。
- 默认atop日志保存周期为28天,可以根据实际修改“-mtime”的值为3,单位为天。
LOGINTERVAL=15 …… ( (sleep 3; find $LOGPATH -name 'atop_*' -mtime +3 -exec rm {} \;)& )
Ubuntu 16系列操作系统配置atop
- 执行以下命令,安装atop。
- 编辑配置文件,修改采样周期。
修改如下配置参数,修改后保存并退出。
- LOGINTERVAL默认是600,可以修改成15,单位秒。
- 默认atop日志保存周期为28天,不支持修改。
LOGINTERVAL=15
SUSE 15、SUSE 12系列操作系统配置atop
- 下载atop源码安装包。
- 执行以下命令安装源码atop。
- 安装编译atop依赖软件包
- 执行以下命令编译atop
rpmbuild -bb atop-2.6.0.spec
- 执行以下命令安装atop
cd /usr/src/packages/RPMS/x86_64
rpm -ivh atop-2.6.0-1.x86_64.rpm
- 编辑配置文件,修改采样周期。
修改如下配置参数,修改后保存并退出。
- LOGINTERVAL默认是600,可以修改成15,单位秒。
- 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
LOGINTERVAL=15 LOGGENERATIONS=3
使用源码方式安装(适用于CentOS Stream 9、openEuler、EulerOS等系列操作系统)
- 执行以下命令解压源码atop。
- 执行以下命令查看systemctl版本。
如果版本大于等于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; \
- 安装编译atop依赖软件包。
- 执行以下命令编译并安装atop。
make systemdinstall
- 编辑配置文件,修改采样周期。
添加如下配置参数,修改后保存并退出。
- LOGINTERVAL默认是600,可以修改成15,单位秒。
- 默认atop日志保存周期为28天,可以根据实际修改LOGGENERATIONS的值为3,单位为天。
LOGOPTS="" LOGINTERVAL=15 LOGGENERATIONS=3 LOGPATH=/var/log/atop
分析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是系统崩溃的时候,用来转储运行内存的一个工具。系统一旦崩溃,内核就无法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核,该内核会将此时内存中的所有运行状态和数据信息收集到一个dump core文件中以便之后分析崩溃原因。
配置kdump操作步骤
- 查看是否已经安装kexec-tools。
如果没有安装,则执行下面命令安装。
yum install -y kexec-tools
- 开启kdump默认启动。
- 设置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,其他内容不变。
- 执行grub命令,使以上配置生效。
- 打开/etc/kdump.conf文件中找到“path”参数,添加以下内容。
path /var/crash
默认是保存在/var/crash目录下,如果要保存到其他目录,则改成对应的目录,
例如保存在/home/kdump下,则改成:path /home/kdump
要确保指定的路径有足够的空间保存vmcore,建议剩余空间不小于RAM大小;也可以保存在SAN,nfs等共享设备上。
- 设置转存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
- 执行如下命令重启系统,使以上配置生效。
检查kdump配置是否生效
- 执行以下命令,确认回显信息中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
- 执行以下命令,并确认回显信息中的配置信息正确。
grep core_collector /etc/kdump.conf |grep -v ^"#"
core_collector makedumpfile -l --message-level 1 -d 31
- 执行以下命令,并确认回显信息中的配置信息正确。
grep path /etc/kdump.conf |grep -v ^"#"
path /var/crash
- 执行以下命令,并确认回显信息中的Active的状态为active (exited)。
● 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
- 执行测试命令。
这会触发kdump,重新启动,并将生成的vmcore文件保存的path参数指定的位置。
- 检查vmcore是否生成。
到所在环境path参数所指定的路径查看是否有vmcore文件生成,例如/var/crash/目录。
ll /var/crash/
可以看到生成了一个文件夹,里面有vmcore文件。