Linux之性能监测命令解读
作者:G咖喱炒饭
一、Mpstat命令
实时系统监控工具,此命令会展现cpu、的一些统计信息,这些信息存放在/proc/stat文件中,在多cpu系统里,其不但能查看所有cpu的平均状况信息,而且能够查看特定cpu信息。
Mpstat语法
mpstat [-P {|ALL}] [internal [count]]
-P
:指定要监控那个CPU,范围是[0~n-1],ALL表示监控所有CPUinternal
:相邻两次采样的间隔时间count
:采样次数
直接使用mpstat命令
各列的含义:
Cpu
:处理器idUsr
:在internet时间段里,cpu一共花了多少比例的时间运行在用户态空间或者说是用户进程。Nice
:用户空间进程的cpu‘的调度优先级Sys
:核心时间,CPU花了多少比例的时间在内核空间运行。分配内存、IO操作、创建子进程……都是内核操作。这也表明,当IO操作频繁时,System参数会很高。Iowait
:硬盘io等待时间,在计算机中,读写磁盘的操作远比cpu运行的速度要慢,cpu负载处理数据,而数据一般在磁盘上需要读到内存中才能处理Irq
:硬中断时间,硬中断是由外部事件引起的具有随机性和突发性Soft
:软中断时间,软中断是执行中断指令产生的Steal
:显示虚拟机管理器在服务另一个虚拟处理器时虚拟cpu处在非资源等待下花费时间的百分比即虚拟机强制cpu等待的时间的百分比Gnice
:CPU运行niced guest虚拟机所花费的时间百分比Guest
:显示运行虚拟处理器时花费时间的百分比Idle
:cpu出去等待磁盘io操作外的因为任何原因而空闲的时间闲置时间即cpu空闲时间百分比
指定参数查看
mpstat -P ALL 3 3 :查看所有cpu,每三秒查看一次,查看3次。
单独查看 一个cpu
mpstat -P 0 1 2 单独指向一个cpu,需要注意的cpu序号是从0开始的
stress压力测试
stress 是Unix类系统下的工作量和压力测试工具。它可对用户指定的CPU数量的I/O,内存和硬盘进行负载并报告它检测到任何错误。
工具安装:
如果采用YUM安装方式,则需要首先安装epel的扩展源,然后安装stress即可,相关命令如下: yum install -y epel-release yum install -y stress
常用参数:
-c | cpu | 产生n个进程,每个进程都反复不停的计算随机数的平方根 |
-i | io | 产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上 |
-m | vm | 产生n个进程,每个进程不断分配和释放内存 |
-t | timout | 在n秒后结束进程 |
-d | hdd | 产生n个不断执行 write 和unlink函数的进程(创建文件、写入内容、删除文件 |
压力测试:
二、iostat命令
iostat主要用于输出磁盘io和cpu的统计信息
iostat命令语法
iostat【选项】【时间间隔】【次数】
-c
:显示CPU使用情况-d
:显示磁盘使用情况-N
:显示磁盘阵列(LVM)信息-n
:显示NFS使用情况-k
:以KB为单位显示-m
:以M为单位显示-t
:报告每秒向终端读取和写入的字符数和CPU的信息-V
:显示版本信息-x
:显示详细信息-p
:[磁盘]显示磁盘和分区的情况
cpu属性说明
user
:CPU处在用户模式下的时间百分比。nice
:CPU处在带NICE值的用户模式下的时间百分比。system
:CPU处在系统模式下的时间百分比。iowait
:CPU等待输入输出完成时间的百分比。steal
:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。idle
:CPU空闲时间百分比。
磁盘属性说明
device
:磁盘名称tps
:每秒钟发送到的I/O请求数.Blk_read/s
:每秒读取的block数.Blk_wrtn/s
:每秒写入的block数.Blk_read
:读入的block总数.Blk_wrtn
:写入的block总数.
-x 详细显示说明
rrqm/s
:每秒进行merge的读操作数目。即rmerge/swrqm/s
:每秒进行merge的写操作数目。即wmerge/sr/s
:每秒完成的读I/O设备次数。即rio/sw/s
:每秒完成的写I/O设备次数。即wio/srkB/s
:每秒读K字节数。是rsect/s的一半,因为每扇区大小为512字节。wkB/s
:每秒写K字节数。是wsect/s的一半。avgrq-sz
:平均每次设备I/O操作的数据大小(扇区)。avgqu-sz
:平均I/O队列长度。r_await
:每个读操作平均所需的时间不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间。w_await
:每个写操作平均所需的时间不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间。await
:平均每次设备I/O操作的等待时间(毫秒)。svctm
:平均每次设备I/O操作的服务时间(毫秒)。%util
:一秒中有百分之多少的时间用于I/O操作,即被io消耗的cpu百分比
只显示磁盘设备 -d
三、iotop
iotop命令是一个用来监视磁盘io使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、O、进程等相关信息。
Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。
如果命令未安装可以从yum仓库进行安装
命令使用方法
Iotop(选项)
-o
:只显示有io操作的进程b
:批量显示,无交互,主要用作记录到文件。-n NUM
:显示NUM次,主要用于非交互式模式。-d SEC
:间隔SEC秒显示一次。-p PID
:监控的进程pid。-u USER
:监控的进程用户。
iotop常用快捷键:
- 1.左右箭头:改变排序方式,默认是按lO排序。
- 2.r:改变排序顺序。
- 3.o:只显示有IO输出的进程。
- 4.p:进程/线程的显示方式的切换。
- 5.a:显示累积使用量。
- 6.q:退出。
命令效果:
四、pidstat
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存一、线程、设备IO等系统资源的占用情况。
pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。
用户可以通过指定统计的次数和时间来获得所需的统计信息。
Pidstat使用方法
Pidstat 【选项】 【时间间隔】【次数】
常用参数:
-u
:默认的参数,显示各个进程的cpu使用统计-r
:显示各个进程的内存使用统计-d
:显示各个进程的IO使用情况-p
:指定进程号-w
:显示每个进程的上下文切换情况-t
:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V
:版本号-h
:在一行上显示了所有活动,这样其他程序可以容易解析。-I
:在SMP环境,表示任务的CPU使用率/内核数量-l
:显示命令名和所有参数
示例一、查看所有进程的 CPU 使用情况( -u -p ALL)
详细说明
PID
:进程ID%usr
:进程在用户空间占用cpu的百分比%system
:进程在内核空间占用cpu的百分比%guest
:进程在虚拟机占用cpu的百分比%CPU
:进程占用cpu的百分比CPU
:处理进程的cpu编号Command
:当前进程对应的命令
示例二: 内存使用情况统计(-r)
使用-r选项,pidstat将显示各活动进程的内存使用统计:
PID
:进程标识符Minflt/s
:任务每秒发生的次要错误,不需要从磁盘中加载页Majflt/s
:任务每秒发生的主要错误,需要从磁盘中加载页VSZ
:虚拟地址大小,虚拟内存的使用KBRSS
:常驻集合大小,非交换区五里内存使用KBCommand
:task命令名
示例三:显示各个进程的IO使用情况(-d)
报告IO统计显示以下信息:
PID
:进程idkB_rd/s
:每秒从磁盘读取的KBkB_wr/s
:每秒写入磁盘KBkB_ccwr/s
:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。COMMAND
:task的命令名
示例四:显示每个进程的上下文切换情况(-w)
PID
:进程idCswch/s
:每秒主动任务上下文切换数量Nvcswch/s
:每秒被动任务上下文切换数量Command
:命令名
示例五:显示选择任务的线程的统计信息外的额外信息 (-t)
TGID
:主线程的表示TID
:线程id%usr
:进程在用户空间占用cpu的百分比%system
:进程在内核空间占用cpu的百分比%guest
:进程在虚拟机占用cpu的百分比%CPU
:进程占用cpu的百分比CPU
:处理进程的cpu编号Command
:当前进程对应的命令
五、lsof
lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。
是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
语法
lsof(选项)
选项 | 描述 |
---|---|
-a | 列出打开文件存在的进程; |
-c<进程名> | 列出指定进程所打开的文件; |
-g | 列出GID号进程详情; |
-d<文件号> | 列出占用该文件号的进程; |
+d<目录> | 列出目录下被打开的文件; |
+D<目录> | 递归列出目录下被打开的文件; |
-n<目录> | 列出使用NFS的文件; |
-i<条件> | 列出符合条件的进程。(4、6、协议、:端口、 @ip ) |
-p<进程号> | 列出指定进程号所打开的文件; |
-u | 列出UID号进程详情; |
-h | 显示帮助信息 |
-v | 显示版本信息 |
[root@localhost~]# lsof command PID USER FD type DEVICE SIZE NODE NAME
lsof输出各列信息的意义如下
COMMAND
:进程的名称PID
:进程标识符PPID
:父进程标识符(需要指定-R参数)USER
:进程所有者PGID
:进程所属组FD
:文件描述符,应用程序通过文件描述符识别该文件。DEVICE
:指定磁盘的名称SIZE
:文件的大小NODE
:索引节点(文件在磁盘上的标识)NAME
:打开文件的确切名称
FD文件描述符列表
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:表示标准错误
文件类型:
DIR
:表示目录。CHR
:表示字符类型。BLK
:块设备类型。UNIX
: UNIX 域套接字。FIFO
:先进先出 (FIFO) 队列。IPv4
:网际协议 (IP) 套接字。DEVICE
:指定磁盘的名称SIZE
:文件的大小NODE
:索引节点(文件在磁盘上的标识)NAME
:打开文件的确切名称
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。