配置Linux 分析工具atop和kdump
atop
atop是一个功能非常强大的linux服务器监控工具。
它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘、网络)的使用情况和进程运行情况。
并以日志文件的方式保存在磁盘中,服务器出现问题后,我们可以获取相应的atop日志文件进行分析。
安装atop
以centos 7 / 8 为例,运行以下命令:
yum install -y atop
atop配置
atop配置文件为/etc/sysconfig/atop,
参数说明:
LOGINTERVAL:监控周期,单位为秒,默认600s采集一次数据,建议修改为15s。
LOGGENERATIONS:日志保留时间,单位为天。默认保留时间为28天,建议修改为7天,避免大量占用磁盘空间。
LOGPATH:日志保存路径。默认路径为/var/log/atop/ 你可根据实际情况,修改监控周期和日志保留时间。
启动和停止atop
atop安装完成后,默认为停止状态,可执行以下命令启动atop:
systemctl start atop 不建议在生产环境中长时间运行 atop,您可在排查问题完成后停止 atop,命令如下:
systemctl stop atop
分析atop
atop启动后,会将采集到的记录存放在/var/log/atop目录中,通过执行如下命令,查看日志文件。
atop -r /var/log/atop/atop_20210910 atop常用指令如下所示。
c:按照进程CPU使用率进行降序筛选。
m:按照进程内存使用率进行降序筛选。
d:按照进程磁盘使用率进行降序筛选。
a:按照进程资源综合使用率进行降序筛选。
n:按照进程网络使用率进行降序筛选,需要额外安装内核模块才支持,默认不支持。
t:跳转到下一个监控采集点。
T:跳转到上一个监控采集点。
b:指定时间点。
系统资源监控字段说明
ATOP 行:主机名、采样日期和时间点。
PRC 行:进程整体运行情况。
sys 及 user:进程在内核态及用户态所占 CPU 的时间比例。
#proc:进程总数。
#zombie:僵死进程的数量。
#exit:atop 采样周期期间退出的进程数量。
CPU 行:CPU 整体(即多核 CPU 作为一个整体 CPU 资源)的使用情况。【各字段数值相 加结果为 N00%,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:物理内存总量。
cache :用于页缓存的内存大小。
buff:用于文件缓存的内存大小。
slab:系统内核占用的内存大小。
SWP 行:交换空间的使用情况。
tot:交换区总量。
free:空闲交换空间大小。
PAG 行:虚拟内存分页情况
swin 及 swout:换入和换出内存页数。
DSK 行:磁盘使用情况,每一个磁盘设备对应一列。如果有 sdb 设备,那么增加一行 DSK 信息。
sda:磁盘设备标识。
busy:磁盘忙时比例。
read 及 write:读、写请求数量。
NET 行:多列 NET 展示了网络状况,包括传输层(TCP 和 UDP)、IP 层以及各活动的网口信息。
XXXi:各层或活动网口收包数目。
XXXo:各层或活动网口发包数目。
kdump
kdump 是一种先进的基于 kexec 的内核崩溃转储机制。用来捕获kernel crash(内核崩溃)的时候产生的crash dump。当内核产生错误(系统崩溃、死锁或者死机)时,kdump会将内存导出为vmcore保存到磁盘。
配置kdump
以centos 7 / 8 为例:
安装kexec-tools
查看是否已安装kexec-tools
rpm -qa | grep kexec-tools 如果没有安装,执行下面命令安装kexec-tools。
yum install -y kexec-tools
开启kdump开机启动
systemctl enable kdump
设置craskkernel参数
首先查看该参数是否已经设置。
cat /proc/cmdline | grep crashkernel 如果有显示,则表示已经设置,如果没有显示,则需要重新设置。 编辑/etc/default/grub文件
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200 nopti nospectre_v2 nospec_store_bypass_disable"
GRUB_DISABLE_RECOVERY="true"
在GRUB_CMDLINE_LINUX一行添加crashkernel=auto。
更新grub
执行更新grub命令,使配置生效:
grub2-mkconfig -o /boot/grub2/grub.cfg
设置vmcore保存路径
vmcore默认保存在/var/crash目录下,如果要保存到其他目录,可编辑/etc/kdump.conf,修改path一行,将其修改成对应的目录。
path vmcore_directory
## 请确保指定的路径有足够的空间保存vmcore,建议剩余空间不小于物理内存(RAM)的大小。
设置转存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
设置内核参数
编辑/etc/sysctl.conf,添加以下参数。
kernel.hardlockup_panic=1
kernel.panic=5
kernel.panic_on_oops=1
kernel.softlockup_panic=1
kernel.unknown_nmi_panic=1
kernel.nmi_watchdog=1
---以下为可选参数---
kernel.panic_on_io_nmi=1
kernel.panic_on_warn=1
重启系统
reboot