| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 网络协议 -> 监控CPU、磁盘、内存、I/O资源命令(mpstat、iostat、pidstat、iotop、top、lsof、tcpdump、nload) -> 正文阅读 |
|
|
[网络协议]监控CPU、磁盘、内存、I/O资源命令(mpstat、iostat、pidstat、iotop、top、lsof、tcpdump、nload) |
文章目录
前言监控CPU、磁盘、内存、I/O资源命令:mpstat、iostat、pidstat、iotop、top、lsof、tcpdump、nload
一、本章Linux资源监控命令合集mpstat、iostat、pidstat、iotop、top 、lsof、tcpdump、nload (一) mpstat命令——命令主要用于多CPU环境下,它能显示各个CPU状态。这些信息存放在/proc/stat文件中。1、命令的作用mpstat是 Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在**/proc/stat**文件中。在多CPU系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
2、命令格式与用法命令格式
其中参数的含义
使用实验 mpstat
(1)、当mpstat不带参数时,输出为从系统启动以来的平均值。mpstat
(2)、当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段(3秒)的平均信息。mpstat -P ALL 3
(3)、mpstat -P ALL 3 3
输出参数的含义 CPU 处理器ID(从0开始) 注意事项(1)、 mpstat主要用在当系统变慢,平均负载增大时,我们想判断到底是CPU的使用率增大了,还是IO压力增大的情况。 (二)、iostat——监控系统设备的IO负载情况,根据这个可以看出当前系统的写入量和读取量,CPU负载和磁盘负载。1、命令的作用iostat主要用于监控系统设备的IO负载情况,根据这个可以看出当前系统的写入量和读取量,CPU负载和磁盘负载。 2、命令格式
(1)、 iostat
(2)、 iostat -d只显示磁盘统计信息后面还可以加具体哪个磁盘 例如:iostat -d sdb
(3)、iostat -k以KB为的单位显示所有信息
(4)、iostat -m以MB为的单位显示所有信息
(5)、iostat -t显示终端和CPU的信息,每次输出报告时显示系统时间,并报告每秒向终端读取和写入的字节数
(6)、iostat -t -k 查看TPS和吞吐量信息
(7)、iostat -d -x -k 查看设备使用率(%util)、响应时间(await)
3、参数指令
注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。 信息说明
(三)、pidstat——用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。1、命令的作用pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
2、常用的参数:
3、查看所有进程的cpu使用情况pidstat 或 pidstat -u 或pidstat -p ALL 是一样的 (1)pidstat
|
| PID: | 进程ID |
| %usr: | 进程在用户空间占用cpu的百分比 |
| %system: | 进程在内核空间占用cpu的百分比 |
| %guest: | 进程在虚拟机占用cpu的百分比 |
| %CPU: | 进程占用cpu的百分比 |
| CPU: | 处理进程的cpu编号 |
| Command: | 当前进程对应的命令 |

| PID | 进程ID |
| minflt / s | 每秒次缺页错误次数(minor page faults),当虚拟内存地址映射为物理内存地址时, 相应的page数据已经加载到page cache,只需要将该page与进程虚拟地址空间进行映射即可 |
| majflt / s | 每秒主缺页错误次数(major page faults),当虚拟内存映射为物理内存地址时,相应的page数据还在磁盘上,此时则会触发一次major fault, |
| VSZ | 虚拟内存大小,虚拟机内存的使用KB |
| RSS | 常驻内存大小,非交换区里内存使用KB |
| Command | 当前进程对应的命令 |

| PID | 进程ID |
| kB_rd / s | 每秒从磁盘读取的字节数(kb) |
| KB_wr / s | 每秒写入磁盘的字节数(kb) |
| KB_ccwr / s | 任务取消的写入磁盘的字节数(kb),当任务截断脏PageCache |
| iodelay | IO延迟,该延迟包含了等待同步块IO完成和swap块IO完成所花费的延迟 |
| Command | 当前进程对应的命令 |
进程上下文切换,是指从一个进程切换到另一个进程运行。

| PID | 进程ID |
| cswch / s | 每秒主动切换次数 |
| nvcswch / s | 每秒被动切换次数 |
| Command | 当前进程对应的命令 |
主动切换:当前进程无法获取所需资源导致的上下文切换。当IO、内存等系统资源不足时就会发生
被动切换:当进程由于CPU时间分片已到等原因,被系统强制调度所发生的上下文切换。当有大佬进程争抢CPU资源时,就容易发生被动切换
iotop是一款开源、免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息。它是Python语言编写的,与iostat工具比较,iostat是系统级别的IO监控,而iotop是进程级别IO监控。
iotop命令可以用来监控系统中各个进程对IO的使用量,它和top一样可以在非batch模式下运行时进行与用户交互。它主要可以用于监控:
进程/线程的I/O的读写带宽
进程/线程swapin的耗时占比
进程/线程的I/O阻塞(等待)耗时占比
每个进程/线程的I/O优先级
系统中I/O总读写带宽
系统中I/O实际读写带宽(和总读写带宽有时候值并不一致)

| Total DISK READ | 从磁盘中读取数据的总速率 |
| Total DISK WRITE | 从磁盘中写入数据的总速率 |
| Actual DISK READ | 从磁盘中读取数据的实际速率 |
| Actulal DISK WRITE | 从磁盘中写入数据的实际速率 |
| TID | 线程ID,按p可转换成进程ID |
| PRIO | 优先级 |
| USER | 线程所有者 |
| DISK READ | 从磁盘中读取的速率 |
| DISK WRITE | 往磁盘里写入的速率 |
| SWAPIN | swap交换百分比 |
| IO> IO等待所占用的百分比 | |
| COMMAND 进程命令 |
#-v version:显示版本号
#-h help:显示帮助信息
#-o only:只显示正在产生I/O的进程或线程,运行过程中,可以通过按o随时切换
#-b batch:非交互模式下运行,一般用来记录日志。
#-n NUM--iter=NUM:设置监控(显示)NUM次,主要用于非交互模式。默认无限
#-d SEC--delay=SEC:设置显示的间隔秒数,支持非整数
#-p PID--pid=PID:只显示指定进程(PID)的信息
#-u USER--user=USER:显示指定的用户的进程的信息
#-P processes:只显示进程,不显示所有线程
#-a accumulated:累积的I/O,显示从iotop启动后每个进程累积的I/O总数,便于诊断问题
-k kilobytes:显示使用KB单位
-t time:交互模式下,加上时间戳。
-q quiet:只在第一次监测时显示列名. 去除头部一些行:这个参数可以设置最多3次来移除头部行:-q列头部只在最初交互显示一次;-qq列头部不显示;-qqq,I/O的总结不显示


iotop -n 3 在刷新3次后自动退出

如:iotop -d 1 1秒刷新一次



iotop -u root #只显示root下的进程/线程



常用快捷键(交互模式)
r:改变排序顺序。
o:只显示有IO输出的进程。
p:进程/线程的显示方式的切换。
a:显示累积使用量。
q:退出。
除了-b选项启动的iotop,可以在运行期间执行一些命令如下
|:-|:-|
|左右箭头|改变排序的列|
|r|反向排序,按io|
|o|切换至选项–only|
|p|切换至–processes选项|
|a|切换至–accumulated选项|
|q|退出 |
|i|改变线程的优先级|
交互模式下除了以上这些交互命令键之外的任意键都会强制刷新

| PID | 进程id号 |
| USER | 进程所有者的用户名 |
| PR | 优先级(由内核动态调整),用户不能 |
| NI | 进程优先级,nice值,负值表示高优先级,正值表示低优先级,用户可自己调整 |
| VIRT | 虚拟内存,是进程正在使用的所有内存 |
| RES | 进程所使用的物理内存 |
| SHR | 共享内存大小,(单位KB) |
| S | 进程状态 |
| %CPU | 上次更新到现在的CPU时间占用百分比 |
| %MEM | 进程使用的物理内存百分比 |
| TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
| COMMAND | 命令名/命令行 |
lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
lsof (选项)
-a 列出打开文件存在的进程;
#-c<进程名> 列出指定进程所打开的文件;
-g 列出GID号进程详情;
#-d<文件号> 列出占用该文件号的进程;
+d<目录> 列出目录下被打开的文件;
+D<目录> 递归列出目录下被打开的文件;
-n<目录> 列出使用NFS的文件;
-i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
#-p<进程号> 列出指定进程号所打开的文件;
#-u 列出UID号进程详情;
-h 显示帮助信息;
-v 显示版本信息。
不带任何参数执行 lsof命令会输出当前所有活跃进程打开的所有文件
lsof | more ——输出当前所有活跃进程打开的所有文件

lsof -p 1列出1号进程打开的文件

lsof -u root

lsof -d 10 输出打开文件描述符10的所有项

这里举了个例子


COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
lnn:library references (AIX)(库引用);
er:FD information error (see NAME column)(fd信息错误);
jld:jail directory (FreeBSD)(监控目录);
ltx:shared library text (code and data)(共享库文本);
mxx :hex memory-mapped type number xx(十六进制内存映射类型号xx);
m86:DOS Merge mapped file(DOS合并映射文件);
mem:memory-mapped file(内存映射文件);
mmap:memory-mapped device(内存映射设备);
pd:parent directory(父目录);
rtd:root directory(跟目录);
tr:kernel trace file (OpenBSD)(内核跟踪文件);
v86 VP/ix mapped file(VP/IX映射文件);
0:表示标准输出
1:表示标准输入
2:表示标准错误
跟在标准输出、标准错误、标准输入后
u:表示该文件被打开并处于读取/写入模式。
r:表示该文件被打开并处于只读模式。
w:表示该文件被打开并处于。
空格:表示该文件的状态模式为unknow,且没有锁定。
-:表示该文件的状态模式为unknow,且被锁定。
在文件状态模式后面,还跟着相关的锁
N:for a Solaris NFS lock of unknown type(对于未知类型的Solaris NFS锁);
r:for read lock on part of the file(用于对文件的一部分进行读取锁定);
R:for a read lock on the entire file(整个文件的读取锁定);
w:for a write lock on part of the file;(文件的部分写锁)
W:for a write lock on the entire file;(整个文件的写锁)
u:for a read and write lock of any length(对于任意长度的读写锁);
U:for a lock of unknown type(对于未知类型的锁);
x:for an SCO OpenServer Xenix lock on part of the file(对于文件的sco openserver xenix锁);
X:for an SCO OpenServer Xenix lock on the entire file(对于整个文件的sco openserver xenix锁);
space:if there is no lock(如果没有锁)
DIR:表示目录。
CHR:表示字符类型。
BLK:块设备类型。
UNIX: UNIX 域套接字。
FIFO:先进先出 (FIFO) 队列。
IPv4:网际协议 (IP) 套接字。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
tcpdump使用
tcpdump -i ens33

nload是一个Linux命令行工具,用于使用有洞察力的图表和流量统计信息实时监视网络流量和带宽使用情况,一般用于实时监控Linux网络下的流量信息,可以通过Incoming和Outgoing两项对比来对进出站的流量进行可视化监控。
先下载epel-release库才能下载nload
安装nload
Yum install -y epel-release
Yum install -y nload


参数选项
1显示台参数

#nload默认使用的是ens33网卡,若想监控其他网卡,可以在命令后方加上需要监控的网卡
参数说明
#Incoming:进入网卡的流量
#Outgoing:从网卡流出的流量
#Curr:当前流量
#Avg:平均流量
#Min/Max:最大/最小流量
#Ttl:流量总和
常用参数选项
-a 全部数据的刷新时间周期,单位是秒,默认是300
-i 进入网卡的流量图的显示比例最大值设置,默认10240 kBit/s
-m 不显示流量图,只显示统计数据
-o 出去网卡的流量图的显示比例最大值设置,默认10240 kBit/s
-t 显示数据的刷新时间间隔,单位是毫秒,默认500
-u 设置右边Curr、Avg、Min、Max的数据单位,默认是自动变的,注意大小写单位不同
了解:mpstat、iostat、iotop、nload、pidstat、lsof、tcpdump、top这几个命令
|
|
| 网络协议 最新文章 |
| 使用Easyswoole 搭建简单的Websoket服务 |
| 常见的数据通信方式有哪些? |
| Openssl 1024bit RSA算法---公私钥获取和处 |
| HTTPS协议的密钥交换流程 |
| 《小白WEB安全入门》03. 漏洞篇 |
| HttpRunner4.x 安装与使用 |
| 2021-07-04 |
| 手写RPC学习笔记 |
| K8S高可用版本部署 |
| mySQL计算IP地址范围 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/30 3:47:00- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |