Centos 7系统安装开源系统监控工具atop

in linux监控 with 0 comment

Centos 7 安装atop

yum安装atop

yum install atop -y

页面提示信息为 Complete! 时说明已成功安装。

配置atop

修改监控周期和日志保留时长

修改以下配置:
vim /etc/sysconfig/atop

# LOGINTERVAL=600 修改为 LOGINTERVAL=30,表示将默认的600s监控周期修改为30s。建议修改为30s,您可结合实际情况进行修改。
# LOGGENERATIONS=28 修改为 LOGGENERATIONS=7,表示将默认的日志保留时间28天修改为7天。为避免 atop 长时间运行占用太多磁盘空间。

配置日志切割

atop很神奇的,不会自动按日切割日志,只能搞点骚操作了。

通过在每日0点重启服务来切割日志。

# 修改配置:
vi /etc/crontab
# 最下面加入一行:
0 0 * * * root systemctl try-restart atop
# 然后执行命令让定时任务生效:
service crond restart

安装网络监控模块netatop(默认不安装)

安装依赖模块

# 执行命令:
yum install elfutils-libelf-devel

下载netatop文件

curl -LO https://www.atoptool.nl/download/netatop-3.1.tar.gz

安装netatop

# 解压
tar -zxf netatop-3.1.tar.gz
# 编译
make
# 安装
make install

# 报错
make: *** /lib/modules/3.10.0-957.el7.x86_64/build: 没有那个文件或目录

# 查看内核源码是否存在
ll /usr/src/kernels/
ll /lib/modules/

# 如果不存,需要安装devel内核包,到下面网址下载对应的内核包,通过yum安装
https://buildlogs.centos.org/
https://developer.aliyun.com/

# 如果安装devel报错gcc版本过低,安装gcc
yum install gcc

netatop启动

开机启动,systemctl enable netatop
启动,systemctl start netatop
状态,systemctl status netatop
停止,systemctl stop netatop

注意:如果atop先启动,然后再启动netatop,暂时是收集不到网络日志的,建议删了当天日志,然后重启atop重新收集

atop启动命令

使用systemctl体系来搞的,通用的status,start,stop等

开机启动,systemctl enable atop
启动,systemctl start atop
状态,systemctl status atop
停止,systemctl stop atop
重启,systemctl restart atop

分析 atop

atop 启动后,会将采集的数据记录在 /var/log/atop 目录的日志文件中。请获取实际的日志文件名,执行以下命令,

atop -r /var/log/atop/atop_2021xxxx

atop 常用命令

在打开日志文件后,使用以下命令筛选所需数据:

c:按照进程的 CPU 使用率降序筛选。
m:按照进程的内存使用率降序筛选。
d:按照进程的磁盘使用率降序筛选。
a:按照进程资源综合使用率进行降序筛选。
n:按照进程的网络使用率进行降序筛选(使用此命令需安装额外的内核模块,默认不支持)。
t:跳转到下一个监控采集点。
T:跳转到上一个监控采集点。
b:指定时间点,格式为 YYYYMMDDhhmm。
g:按 CPU 使用率排序,默认排序方式
y:查看线程信息
j:查看 container 聚合信息
v: 输出更详细的进程信息,包括进程的启动时间,进程号,用户和所在组,当前状态。

Centos 6 安装atop

下载安装atop

# 下载
wget --no-check-certificate  http://www.atoptool.nl/download/atop-2.1-1.x86_64.rpm
# 安装
rpm -ivh atop-2.1-1.x86_64.rpm 
# 设置开机自启动
chkconfig --add atop
chkconfig atop on --level 235

默认情况下顶上将记录每600秒的所有活动。 因为这可能不是很有用,我会改变顶上的配置,因此,所有的活动将在10秒记录1次,运行以下命令:

修改配置文件

# atop2.1配置文件位置
sed -i 's/600/10/' /etc/atop/atop.daily

# atop2.3配置文件位置
sed -i 's/600/10/' /usr/share/atop/atop.daily

如需使用网络(要netatop内核模块)显示每进程的网络活动

# 安装netatop内核依赖模块
yum install kernel-devel zlib-devel

下载netatop和构建模块和守护进程。

# 下载
wget --no-check-certificate http://www.atoptool.nl/download/netatop-0.3.tar.gz
# 安装
tar -xvf netatop-0.3.tar.gz
cd netatop-0.3
make
make install

# 报错
make: *** /lib/modules/3.10.0-957.el7.x86_64/build: 没有那个文件或目录

# 需要安装devel内核包,到下面网址下载对应的内核包,通过yum安装
https://buildlogs.centos.org/
https://vault.centos.org/

# 如果安装devel报错gcc版本过低,安装gcc
yum install gcc

netatop模块安装成功后,加载模块并启动守护程序

# 启动netatop
service netatop start
# 加入开机自启动
chkconfig --add netatop

现在,使用检查网络使用“n”键。

atop -n

net.png

字段说明


进程

第一行PRC显示总体进程状况:

sys, user 表示 CPU 在内核态和用户态的运行时间比例

#proc 为当前总进程数,

#trun 表示 running 状态线程数

#tslpi 表示 sleeping interruptible 状态的进线程数

#tslpu 表示 sleeping uninterruptible 状态线程数

#zombie 表示僵尸进程数

clones 表示在监控周期(默认10s)内 clone() 系统调用次数

linux 中进程有两种 sleep 状态:

interruptible sleep: 进程接收系统信号,可以被系统信号中断

uninterruptible sleep: 进程不接收系统信号,不可被系统信号中断,包括kill -9 (SIGKILL 信号)。当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。

一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。大量僵尸进程可能会占用进程描述符空间导致无法创建进程。

孤儿进程是容易与僵尸进程混淆的一类进程,孤儿进程是父进程终止的进程,它们会被 init 进程接管并不会产生危害。


CPU

在 atop 中每个 CPU 逻辑核心拥有一个 cpu 行表示自身状态, 最前面的 CPU 行则展示系统总览。

系统负载

CPU 负载或称为系统负载是一个容易被误解的监控项,它的定义为内核运行队列中 running 或 uninterruptible sleep 状态的进程的平均数与CPU计算能力的比值。

系统负载 1.0 说明CPU恰好满载,当系统负载大于1.0时会有进程因为等待CPU而阻塞。在多核系统中,系统负载等于CPU核心数表示恰好满载,如在上图所示双核系统中,load=2说明恰好满载。

上文已经说明,uninterruptible sleep 进程通常是在等待IO, 当网络异常或磁盘故障时会导致大量进程处于 uninterruptible sleep 状态从而导致 Load 急剧上升。

常见的服务器程序大多数为IO密集型程序,常见的CPU密集型任务包括:

当我们发现 CPU 使用率上升时,我们可以优先考虑是否在上述CPU密集型任务。


内存

MEM 行描述内存使用情况:

*

*   cache: 文件缓存用量

这里出现了两个两个缓存: cache 和 buffer:

cache 是指 page cache, 是在文件系统级别的缓存。用于缓存从文件中读取的数据,下次读取文件时可以从内存中快速获取,不需要进行磁盘IO。

buffer 是磁盘等块设备的缓存,不经过文件系统直接对磁盘进行读写的数据会缓存在 buffer 中。

文件需要映射到物理磁盘的块上,这层映射关系由文件系统负责维护。没有文件系统支持的数据读写都会使用 buffer 缓存,比如文件系统元数据的缓存,以及 dd 等工具直接对磁盘进行读写时需要的缓存。

cache 和 buffer 两个缓存既会被用在读请求中,也会被用在写请求中。

PAG 行表示页缓存的使用情况:

scan: 当可用内存不足时扫描的页数,这个值过高说明可用内存不足

stall: 内核紧急将页加载到内存中的次数,这个值过高说明可用内存不足

steal: 虚拟机相关指标

swin: 从 Swap 分区将页加载到内存的次数

swout: 将内存页写入 Swap 分区的次数

scan 和 steal 的解释比较难理解,附上 man page 中的原文:

This line contains the number of scanned pages ('scan') due to the fact that free memory drops below a particular threshold and the number times that the kernel tries to reclaim pages due to an urgent need ('stall')

SWP 行表示 Swap 分区使用状态:

tot: Swap 分区总大小

free: Swap 分区空闲空间大小

当物理内存不足时,内核会将进程内存中不常用的页逐出内存写入磁盘中的 Swap 分区,当进程需要读取这些页时再将它们从磁盘中加载到内存。


磁盘

DSK 列描述磁盘使用情况:


网络

网络层通常包含 transport、network、 eth 和 lo 行, 分别表示传输层、网络层、以太网(数据链路层)和本地回环的监控指标。

tcpi/udpi/ipi: 接收的 tcp/udp/ip 数据包

tcpo/udpo/ipo : 发出的 tcp/udp/ip 数据包

tcpao: 主动建立的tcp连接数(active open)

tcppo: 被动建立的tcp连接数(passive open), 即通过 listen() 建立的连接数

tcprs: tcp 重传次数

tcpie: 读取时发生错误的次数

进程列表
进程列表有多个视图分别展示不同方面的数据:

默认视图(Generic information): 按G键回到默认视图

内存视图(Memory information): 按M键进入内存视图,显示进程的内存占用情况

命令行视图(Command Line information): 按C键进入命令行视图,显示进程启动时详细命令行参数

调度器视图(Scheduling information): 按S键进入视图,显示线程调度、CPU使用和运行统计

磁盘视图(Disk information): 按D键进入视图,显示进程的磁盘IO使用情况

网络视图(Network information): 按N键进入视图,显示进程的网络IO使用情况

atop 默认展示过去10s内状态发生变化的进程,按下A键可以查看全部进程。


默认视图

默认视图展示常用的监控项:

简单介绍一下进程状态


内存视图

按M键可以进入内存视图查看进程的内存使用情况:

在 Linux 的内存管理系统中需要读取磁盘才能解决缺页中断称为大错误(Major Page Fault), 不需要读取磁盘可以解决的缺页中断被称为小错误(Minor Page Fault)。

一般情况下 MINFLT 是因为频繁分配/回收大内存块导致的,可以考虑使用内存池优化程序来减少缺页错误; MAJFLT 是由于物理内存不足导致。


调度视图

按S键可以进入调度视图(Scheduling View)查看进程运行和CPU情况:

参考文档:https://zhuanlan.zhihu.com/p/574978816

Responses