Linux 系统监控工具 atop

【自取】最近整理的,有需要可以领取学习:

系统监控是运维工作中重要的一环,本文以 atop 工具为例来介绍系统的重要监控项。

atop可以使用yum或apt包管理器进行安装。atop man page 中详细说明了 atop 中各监控项含义及atop命令用法。

Linux 系统监控工具 atop

如上图所示, atop 的界面分为上半部分的系统监控项和下半部分的进程列表。

atop 每10s更新一次系统监控项以及在这段时间内状态发生变化的进程,按下A键可以查看全部进程。

系统状态

进程

第一行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 行则展示系统总览。

  • sys 表示CPU在内核态工作时间比例
  • user 表示 CPU 在用户态工作时间比例
  • irq 表示 CPU 处理系统中断所消耗的时间比例
  • idle 表示 CPU 空闲时间比例

CPL 行表示 CPU 负载(CPU Load):

  • avg1, avg5, avg15: 过去 1min、5min和 15min 内的平均系统负载
  • csw 表示监控周期内上下文切换的次数
  • intr 表示监控周期内中断发生的次数

系统负载

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

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

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

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

  • 大规模的排序计算, 如 mysql filesort
  • 大量的正则表达式匹配
  • 大量的 Hash Code 计算
  • 大规模的加解密或压缩解压计算

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

内存

MEM 行描述内存使用情况:

  • tot: 物理内存总量
  • free: 空闲内存总量
  • cache: 文件缓存用量
  • buff: 块设备缓存用量
  • slab: 系统内核 slab 内存用量
  • dirty: 需要写回磁盘的脏页用量,这部分内存使用已包含在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 列描述磁盘使用情况:

  • vda: 该列为磁盘设备名,每个设备拥有一行
  • busy: 设备处理IO请求的时间占比
  • read: 监控周期内读请求数
  • write: 监控周期内写请求数
  • KiB/r: 每次读请求的平均数据量
  • KiB/w: 每次写请求的平均数据量
  • MBr/s: 每秒读取的数据量
  • MBw/s: 每秒写入的数据量
  • avq: io 队列的平均长度
  • avio: 单次读写请求需要的毫秒数

网络

网络层通常包含 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键可以查看全部进程。

默认视图

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

  • PID: 进程ID
  • SYSCPU: 在内核态下使用CPU时间
  • USERCPU: 在用户态下使用CPU时间
  • VGROW: 过去一个监控周期内进程的虚拟内存空间增长,包括malloc()分配内存、使用共享内存以及free()释放内存造成的空间变化
  • RGROW: 过去一个监控周期内进程常驻内存空间(resident memory)增长, 即进程内存空间中驻留在物理内存中未被逐出到SWAP分区的部分。
  • RUID, EUID, SUID: 启动进程的UID
  • RUID: 登录时的用户ID
  • EUID: Effective Uid。通常EUID=RUID, setuid 或 sudo 等指令能以另一个用户身份执行命令,这个被”代理”的用户即为 Effective User。
  • EXC: 进程退出时的返回码
  • THR: 进程中的线程数
  • S: 进程状态,与ps命令的进程描述符相同

简单介绍一下进程状态

  • R: Runing
  • S: sleeping interruptible 等待某个事件
  • D: sleeping non-interruptible 通常在等待IO
  • Z: Zombie 僵尸进程
  • E: 进程在上个监控周期内退出
  • T: TASK_STOPPED 或 TASK_TRACED 状态
  • TASK_STOPPED: 进程收到 SIGSTOP 信号进入暂停状态
  • TASK_TRACED: 进程进入暂停状态等待跟踪它的进程,比如进程被 gdb 的断点暂停

内存视图

Linux 系统监控工具 atop

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

  • MINFLT: 进程缺页小错误(minor page fault)的次数
  • MAJFLT: 进程缺页大错误(major page fault)的次数
  • VSIZE: 虚拟内存空间的总大小
  • RSIZE: 常驻内存(resident memory)的总大小
  • VGROW: 虚拟内存空间在上个监控周期的增长
  • RGROW: 虚拟内存空间在上个监控周期的增长
  • MEM: 物理内存使用占比

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

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

调度视图

Linux 系统监控工具 atop

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

  • TRUN: running 状态的线程数
  • TSLPI: sleeping interruptible 状态线程数
  • TSLPU: 表示 sleeping uninterruptible 状态进程数
  • PILI: 调度策略
  • PRI,NICE: 优先级,PRI+NICE越低优先级越高
  • CPU: CPU 使用时间占比

监控服务

除了查看当前的状态外,atop 还可以服务方式运行在后台监控并记录系统状态。

使用 service atop startsystemctl start atop 命令启动atop监控服务。

atop 默认将数据保存在 /var/log/atop目录下,10 分钟采集一次,保留最近28天的数据。上述配置可以在 /etc/atop/atop.daily 文件中进行修改。

使用 atop -r <filename></filename> 命令读取日志文件。按t键向前翻页,T键向后翻页,b键跳转到指定时间,时间格式为hh:mm。

Original: https://www.cnblogs.com/Finley/p/12327804.html
Author: -Finley-
Title: Linux 系统监控工具 atop

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10160/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • nodejs调用shell

    shelljs https://github.com/shelljs/shelljs 实例 var shell = require(‘shelljs’); if (!shell.w…

    Linux 2022年9月14日
    0220
  • 【转】如何查看yum 安装的软件路径

    今天使用yum 安装了一个软件,后来没有找到路径 1、首先安装一个redis 2、查找redis的安装包 3、查找安装包的安装路径 4、ok,现在就找到了! ———————————…

    Linux 2022年8月30日
    0280
  • git关联云效使用教程

    一开始以为是登录的账号的密码: 弹出这个窗口输入老是出下面的密码不对的问题: 在云效中配置: 最后找到了账号是https中的账号,配置正确后完成了! Original: https…

    2022年8月30日
    0330
  • 清空Redis集群所有节点的数据工具

    FLUSHALL和FLUSHDB是单机命令,所以清空集群需要在所有Master节点上均执行一次。下载:https://github.com/eyjian/redis-tools/b…

    Linux 2022年9月14日
    0200
  • Linux history [转]

    history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。 该命令单独使用时,仅显示历史命令,在命令行中,可以使…

    Linux 2022年8月24日
    0480
  • Linux下构建 uniapp h5 应用(非命令行创建项目)

    最近公司有git提交uniapp项目之后自动部署h5的需求,故有了此文章。大致流程就是git提交代码后通过Webhooks触发git拉取,然后在Linux主机上编译构建,接下来就是…

    Linux 2022年8月24日
    0240
  • Linux的history出来的命令如何重复执行指定的命令

    1 答案 !加命令序号 2 例如上面951条命令用!951 posted @2021-09-07 10:35 Questions张 阅读(81 ) 评论() 编辑 Original…

    Linux 2022年8月26日
    0270
  • github使用说明

    什么是github,github能做什么?它是一个代码仓库,但是你可以把它当做一个远程硬盘(云盘、网盘)。和一般网盘的区别在于,它通过一个叫做git的软件进行同步,上传或下载操作,…

    Linux 2022年8月30日
    0350
  • 安装Ubuntu 16.04可以进行优化补充的事

    转自 https://blog.csdn.net/qq_36498339/article/details/78642033 1.删除libreoffice libreoffice虽…

    Linux 2022年8月26日
    0230
  • 记一次从源码泄露到getshell(二)

    0x00 前言 文章所述漏洞已经提交至漏洞平台,且所有恶意操作均已复原 0x01 源码泄露 http://www.xxx.com.cn/www.zip 老规矩拿到源码先通关关键词找…

    Linux 2022年9月14日
    0720
  • ubuntu20.04安装PyCharm Professional Edition

    ubuntu20.04安装PyCharm Professional Edition 1.PyCharm官网下载链接(选择2020.1版本下载):https://www.jetbra…

    2022年8月26日
    0320
  • 什么?Android上面跑Linux?

    前言 众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、虚拟机在windows上面跑Android、Linu…

    Linux 2022年9月10日
    0180
  • Gitea 安装,配置,测试

    官网:https://docs.gitea.io/zh-cn/ 关于Gitea Gitea 是一个自己托管的Git服务程序。他和GitHub, Bitbucket or Gitla…

    Linux 2022年8月30日
    0240
  • linux 中 awk print > 选项实现 按照特定列拆分数据

    001、 root@PC1:/home/test2# ls test.map root@PC1:/home/test2# cat test.map ## 用一个map文件进行测试,…

    Linux 2022年8月11日
    0330
  • QtCreator 常用快捷键

    介绍 QtCreator 软件的常用快捷键。 一、单键快捷键 快捷键 含义 打开帮助手册 在函数声明与实现之间切换 在 cpp 和 .h 文件切换 二、Ctrl组合快捷键 快捷键 …

    Linux 2022年8月24日
    0330
  • Window和Linux动态库搜索路径的次序

    最近在做的项目中使用到动态库的动态加载技术,Windows和Linux都提供了相应的函数来打开动态库、获取函数指针和关闭动态库 ,在打开动态库函数(dlopen或LoadLibra…

    Linux 2022年8月24日
    0230
  • Linux(debian-xfce) 输入法

    “输入法框架”是在linux中总会被提及的一个名词,它的作用是监听键盘输入,并传递出可用的中文字符。“输入法框架”英文是 &#822…

    Linux 2022年8月20日
    0440
  • linux批量执行工具omnitty安装及使用

    在生产环境中,可能会有多台linux主机,运维人员可能会对多台主机进行同样的操作,例如:同时在多台主机上添加一个user用户或者查看所有主机的硬件信息,如果没有批量操作工具,设备少…

    Linux 2022年8月11日
    0510
  • Ubuntu18.04 显卡驱动安装(解决各种疑难杂症)

    步骤 下载驱动 准备工作 进行安装 检查安装 下载驱动 首先我们需要去官网下载显卡驱动 打开浏览器,在百度搜索框中搜索:显卡驱动 下载 在 手动搜索驱动程序一栏,根据自己的显卡进行…

    Linux 2022年9月10日
    0400
  • go redis锁

    redis经常用作分布式锁,这里记录一个简单的锁代码如下: package main import ( "crypto/rand" "encoding…

    Linux 2022年9月14日
    0150
  • linux指定cpu运行程序,linux:如何指定进程运行的CPU

    coolshell最新的文章《性能调优攻略》在”多核CPU调优”章节,提到”我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我…

    Linux 2022年8月11日
    0790
  • linux下的nginx重启命令常见以下3种:

    systemctl restart nginx service nginx restart /usr/sbin/nginx -s reload Original: https://…

    Linux 2022年8月8日
    0240
  • linux下git怎么保存账号密码

    我是用 shell 命令来执行 git 操作的,所以就决定在 –global 配置一下用户名和密码,不用每次手动输入了。 设置步骤 首先需要 ftp 连接到你的 Lin…

    Linux 2022年8月13日
    0500
  • 内网渗透测试:利用DCOM进行横向渗透——利用ExecuteShellCommand在做远程命令执行

    COM COM即组件对象模型(Component Object Model,COM) ,是基于 Windows 平台的一套组件对象接口标准,由一组构造规范和组件对象库组成。COM是…

    Linux 2022年9月14日
    0220
  • linux中安装NodeJS

    一、下载 官网:https://nodejs.org/en/download/ 单击 点击Downloads 点击即可下载,下载后如下所示: 2、上传到服务器 3、解压 tar -…

    2022年8月20日
    0260
  • .gitignore == git添加忽略不生效解决方案

    把某些目录或文件加入忽略规则,发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的…

    Linux 2022年8月30日
    0330

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部