dstat 命令详解
原文地址https://blog.csdn.net/zwjzqqb/article/details/80766743
CPU相关参数
-l, --load
展示1分钟、5分钟和15分钟内的平均负载
-c, --cpu
展示cpu状态,usr用户占比,sys系统占比,idl空闲占比,
wai等待次数,这四个加和是100,
hiq硬中断次数,siq软中断次数
-C 必须和-c配合使用:dstat -cC 0,3,total
分别展示第0颗和第3颗以及总体cpu状态
--snooze
展示每秒的CPU时钟频率,
脚本位置/usr/share/dstat/dstat_snooze.py
进程相关参数
-p, --proc
展示当前时刻的进程状态:可运行态(就绪态),
无法中断的睡眠态(等待态),新进程,
文档原文为:runnable, uninterruptible, new。
就绪态进程多代表负载较高,配合-l参数确认,
比如run为80,即当前有80个进程等待CPU处理,
等待态进程多代表当前IO可能有问题,
等待态进程是内存中等待非CPU资源的进程,
一般是等待IO,可以根据-c的wai列确认,
进一步根据-g的in列确认是否是内存瓶颈后的恢复期,
配合-s参数查看换页使用情况,-d查看当前bio情况,
如果-d的bio的read和-g的in差不多,
表名当前IO主要是换页到内存加载造成的,
即内存不足后的恢复期,
如果-g和-s表名换页未使用,但是-d居高,
则说明当前有大量进程等待磁盘IO,
使用--top-bio-adv确定bio最高的进程,
如果-d也不高,但是-n较高,说明进程等待网络IO
使用--top-io-adv确定IO最高的进程。
--proc-count
展示进程数量,侧面反映系统负载
-y, --sys
展示系统中断次数int和上限文切换次数csw,
上下文切换:CPU运行任务1,切换运行就绪态任务2,
任务1可能变成就绪态(CPU时间片耗光),
也可能变成等待态(等待IO等非CPU资源),
CPU的处理时间片教短,中断和上下文切换次数数字会很大,
也能从侧面反映负载,如果中断和上下文切换暴涨,
表明负载过大,或者程序设计不合理,或者kernel级别的BUG。
-i, --int
展示中断状态,如下图,设备号为32、33和35的设备产生了中断,
查看/proc/interrupts确定设备号对应的设备信息。
-I 必须和-i配合使用:dstat -i -I 32,35
指定设备号展示中断状态
--ipc
展示IPC(进程间通信)状态,
包括msg消息队列 ,sem线程队列,shm共享内存使用
--dbus number of dbus connections (needs python-dbus)
展示dbus连接数
进程最耗资源统计
以下脚本都存在于目录/usr/share/dstat中
--top-cpu
展示最耗CPU的进程名和CPU占比
--top-cpu-adv
展示最耗CPU的进程名、PID和CPU占比以及读写信息,
这个读写信息是一个差值,推测是内存的读写。
--top-cputime
展示耗费CPU时间最多的进程名和耗费时间(ms)
--top-cputime-avg
展示平均最耗CPU时间片的进程名和时间耗费(ms)
--top-latency
显示延迟最高的进程名和延迟时间(ms)
--top-latency-avg
显示平均延迟最高的进程名和延迟时间(ms)
--top-bio
展示当前最耗block I/O的进程名和读写的容量
--top-bio-adv
展示当前最耗block I/O的进程名、PID和读写容量以及CPU占比
即最高磁盘IO的进程。
--top-io
展示最耗IO的进程名和IO读写信息,
被统计的IO信息包括blockIO和内存还有网络等全部,
因此如果要判定最耗磁盘读写的进程,应该使用--top-bio,
某一时刻,最耗IO和最耗blockIO的进程不一定是同一个。
--top-io-adv
展示最耗IO的进程名、PID和读写信息以及CPU使用占比
--top-mem
展示最耗内存的进程名和内存消耗
--top-oom
展示最先OOM杀死的进程,OOM是内存回收机制
--top-int
show most frequent interrupt
命令报错,暂未研究。
--top-childwait
展示等待子进程相应最多的进程,
即等待子进程最多的父进程。
show process waiting for child the most
内存相关参数
-m, --mem
展示内存状态,包括used, buffers, cache, free
--vm (hard pagefaults, soft pagefaults, allocated, free)
展示虚拟内存状态,包括:majpf(hard pagefaults),
minpf(soft pagefaults),alloc和free,具体意义未知。
换页空间相关参数
-g, --page
展示内存到换页空间(swap)的使用情况,
从内存到换页是out,从换页到内存是in,
只有频繁的in和out才表明内存不足。
-s, --swap
展示换页空间使用状态,换页空间有空间使用不代表内存不足,
通过-g参数查看是否有频繁的换入换出来判断内存是否不足。
-S 必须和-s配合使用:dstat -sS swap1,total
当存在多个换页空间时,指定展示某个swap和总体使用情况
网络相关参数
-n, --net
展示总体网络收发状态,折算后附带单位友好展示
-N 必须和-n配合使用:dstat -n -N eth0,total
当存在多网卡时,可以分别指定展示各个网卡的收发状态
--net-packets
展示收发的包数量
--socket
展示套接字状态,包括tot总数量,tcp套接字数量,udp套接字数量,
raw原始套接字数量,frg(ip-fragments IP碎片)套接字数量。
--raw
展示原始套接字(raw sockets接收本机网卡上的数据帧或者数据包的套接字)状态。
--tcp (listen, established, syn, time_wait, close)
展示tcp网络连接状态,lis监听的数量,act(established)活动的确立的数量,
synTCP/IP的握手数量,tim(time_wait)发起关闭后的等待关闭态数量,
clo关闭态数量,即命令netstat -tpln对应记录的搂取合并。
--udp
展示udp网络连接状态,包括lis监听数量和act活动数量。
--unix (datagram, stream, listen, active)
展示数据报(实现UDP)和虚电路(实现TCP/IP)数量,包括:
dgm数据报数量,str虚电路数量,lis虚电路监听数量,act虚电路活动数量
硬盘相关参数
-d, --disk
展示磁盘设备读写总计,折算后附带单位友好展示
-D 必须和-d配合使用:dstat -dD sda,sda2,total
分别展示设备sda和sda2以及总体的读写状态
-r, --io
展示I/O请求状态,包括读请求次数和写请求次数
--aio
展示异步io状态速度
--disk-tps
展示每个磁盘每秒事物读写数量
--disk-util
展示每个磁盘使用百分比
文件系统参数
--freespace
展示每个文件系统的使用情况
--fs
展示文件系统状态,包括打开的文件数量和正在使用的inode数量
--lock
展示文件锁状态(posix, flock, read, write):
pos锁数量,lck锁数量,rea读锁数量,wri写锁数量
MYSQL相关参数
# mysql相关参数使用配置:
yum -y install MySQL-python
export DSTAT_MYSQL_HOST=127.0.0.1
export DSTAT_MYSQL_USER=root
export DSTAT_MYSQL_PWD='ecpss@123'
mkdir /var/lib/mysql
ln -s /usr/local/mysql/mysql.sock /var/lib/mysql/mysql.sock
# 如果功能报错,请修改/usr/share/dstat目录内对应脚本
# 如果参数--mysql5-cmds报错,则修改dstat_mysql5_cmds.py
--innodb-buffer
show innodb buffer stats
--innodb-io
show innodb I/O stats
--innodb-ops
show innodb operations counters
# 以上三个参数信息都由"show engine innodb status\G\n"获得,
# 因涉及os.popen3兼容问题,暂不研究
--mysql5-cmds
展示mysql库所有的dml操作次数,包括:
sel查询次数,ins插入次数,upd更新次数,del删除次数,
加大dstat_mysql5_cmds.py的self.width参数,以免数据展示不全,
该参数是展示数据的最大长度,数据由以下mysql库SQL提供:
show global status like 'Com_select';
show global status like 'Com_insert';
show global status like 'Com_update';
show global status like 'Com_delete';
是mysql库的内存状态,重启后数据清零。
--mysql5-conn
展示mysql库的已经打开的连接数数量和占比,
数据由以下mysql库SQL提供:
show global variables like 'max_connections';
show global status like 'Threads_connected';
ThCo当前打开的连接数数量,%Con数量占总连接数的百分比。
--mysql5-io
展示mysql库与所有客户端的交互字节数:
recv(Bytes_received)从所有客户端接收到的字节数,
sent(Bytes_sent)发送给所有客户端的字节数,
数据由以下mysql库SQL提供:
show global status like 'Bytes_%';
--mysql5-keys
展示mysql库的键缓存信息:
used(Key_blocks_used)键缓存内使用的块数量,
该值为高水位线标记,说明已经同时最多使用了多少块。
read(Key_reads)从硬盘读取键的数据块的次数,
如果Key_reads较大,则Key_buffer_size值可能太小,
可以用Key_reads/Key_read_requests计算缓存损失率。
writ(Key_writes)向硬盘写入将键的数据块的物理写操作的次数。
rreq(Key_read_requests)从缓存读键的数据块的请求数。
wreq(Key_write_requests)将键的数据块写入缓存的请求数。
数据由以下mysql库SQL提供:
show global status like 'Key_%';
--mysql-io
和参数--mysql5-io功能相似,但只展示当前会话的IO信息,
数据由以下mysql库SQL提供:
show status like 'Bytes_%';
--mysql-keys
和参数--mysql5-keys功能相似,但只展示当前会话的keys信息,
数据由以下mysql库SQL提供:
show status like 'Key_%';
dstat数据展示相关参数
-t, --time
展示时间和日期,可以使用DSTAT_TIMEFMT参数改变格式
export DSTAT_TIMEFMT='%Y-%d-%m %H:%M:%S'
-T, --epoch
展示当前时间到1970-01-01 00:00:00 UTC间隔的秒数,即date +%s功能
--noheaders
监控项的名称和参数信息(头两行信息)只输出一次,
数据满屏后不再重复输出。
--output outputfile.csv
将监控信息以csv格式写入文件
--float
使用小数显示数据,与参数--integer互斥
--integer
使用整数显示数据,与参数--float互斥
--bw, --blackonwhite
改变数据输出的颜色,白色背景
--nocolor
关闭彩色显示
--noupdate
当数据刷新间隔大于1秒时,当前数据行会不断刷新,
使用该参数关闭刷新功能。
--profile
记录dstat命令调用的组件和时间资源消耗,生成日志文件,
例:dstat --profile 1 5
--list
列出内部和外部插件名称。
# 文本测试参数
# 修改dstat_test.py和dstat_helloworld.py脚本
# 更换测试文本
--test show test plugin output
--helloworld
Hello world example dstat plugin
Linux系统服务相关参数
# mail服务相关
--postfix
show postfix queue sizes (needs postfix)
--sendmail
show sendmail queue size (needs sendmail)
--qmail
show qmail queue sizes (needs qmail)
# portmap服务相关
--rpc show RPC client calls stats
--rpcd show RPC server calls stats
# squid服务相关
--squid
show squid usage statistics
# nfs服务相关
--nfs3 show NFS v3 client operations
--nfs3-ops
show extended NFS v3 client operations
--nfsd3
show NFS v3 server operations
--nfsd3-ops
show extended NFS v3 server operations
# gpfs服务相关
--gpfs GPFS read/write I/O (needs mmpmon)
--gpfs-ops
GPFS filesystem operations (needs mmpmon)
# ntp服务相关
--ntp show NTP time from an NTP server
# 分布式文件系统lustre相关
--lustre
展示lustre文件系统IO吞吐,
lustre文件系统是一种平行分布式文件系统。
# memcache相关
--memcache-hits
展示memcache的命中和失误
dstat自我耗费相关参数
--dstat
展示dstat命令的cpu时间消耗cput和延迟late
--dstat-cpu
展示dstat命令的详细cpu使用情况
--dstat-ctxt
展示dstat命令的上下文切换
--dstat-mem
展示dstat命令的详细内存使用
硬件相关参数
# 以下数据需要ACPI模块支持:
lsmod | grep "acpi_cpufreq"
yum install -y cpufreq-utils
modprobe acpi_cpufreq
find /sys/ -name scaling_cur_freq
# 该模块支持x86架构,不支持xeon架构,
# 编译内核,加入P4-clockmod模块支持xeon。
--battery
展示电池使用百分比,需要ACPI支持。
--battery-remain
展示电池剩余使用时间,需要ACPI支持。
--cpufreq
展示各个CPU频率百分比,需要ACPI支持。
--fan
展示CPU风扇速度,需要ACPI支持。
--power
展示当前功率消耗,需要ACPI支持。
--thermal
展示硬件温度,需要ACPI支持。
# wifi监控和utmp监控,未找到对应模块
--wifi wireless link quality and signal to noise ratio
--utmp show number of utmp connections (needs python-utmp)
虚拟化架构参数
# 虚拟机ESX架构相关
--vm-memctl
show ballooning status inside VMware guests
--vmk-hba
show VMware ESX kernel vmhba stats
--vmk-int
show VMware ESX kernel interrupt stats
--vmk-nic
show VMware ESX kernel port stats
# 虚拟机OpenVZ架构相关
--vz-cpu
show CPU usage per OpenVZ guest
--vz-io
show I/O usage per OpenVZ guest
--vz-ubc
show OpenVZ user beancounters
其他非重要参数
-a, --all
展示5个默认参数-cdngy信息
-f, --full
展示-C, -D, -I, -N, -S,需要和-cdins参数连用
-v, --vmstat
等同于参数 -pmgdsc -D total
--plugin-name
展示外部插件状态,外部插件是指用户自建的检测项目。
根据man手册PLUGINS部分显示,
应以支持的PLUGINS设备名替换--plugin-name,
如:dstat --dstat-cpu
这些外部插件实际上就是python脚本,
可以在/usr/share/dstat找到对应脚本,
也可以自己编写python脚本放入对应位置。
原文地址https://blog.csdn.net/zwjzqqb/article/details/80766743