linux服务器性能监控命令汇总之dstat命令(二)

dstat 命令是一个用来替换 vmstat、iostat、netstat、nfsstat 和 ifstat 这些命令的工具,是一个全能系统信息统计工具。dstat扬长避短,即克服了这些命令的局限又增加了一些额外的功能,不但拥有更多的监控项,也更灵活。与 sysstat 相比,dstat 拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且 dstat 支持即时刷新,譬如输入 dstat 3 即每三秒收集一次,但最新的数据都会每秒刷新显示。和 sysstat 相同的是,dstat 也可以收集指定的性能资源,譬如 dstat -c 即显示 CPU 的使用情况。dstat在性能测试、基准测试和排除故障过程中可以很方便监控系统运行状况。

特性

  • 结合了vmstat,iostat,ifstat,netstat以及更多的信息
  • 实时显示统计情况,输出报告
  • 在分析和排障时可以通过启用监控项并排序
  • 模块化设计
  • 使用python编写的,方便扩展现有的工作任务
  • 容易扩展和添加你的计数器
  • 包含的许多扩展插件——增加新的监控项目很方便
  • 可以分组统计块设备/网络设备,并给出总数
  • 可以显示每台设备的当前状态
  • 极准确的时间精度,即便是系统负荷较高也不会延迟显示
  • 显示准确地单位和和限制转换误差范围
  • 不同的计量单位用不同的颜色显示
  • 显示中间结果延时小于1秒
  • 支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形

安装
只演示CentOS下的安装(我的实验环境为CentOS)

[root@wmstianjin16172 ~]# yum install dstat

install

测试命令
安装完成测试一下命令是否完成安装

[root@wmstianjin16172 ~]# dstat

dstat

直接使用 dstat,默认使用的是 -cdngy 参数,分别显示 cpu、disk、net、page、system 信息,默认是 1s 显示一条信息。可以在最后指定显示一条信息的时间间隔,如 dstat 5 是没 5s 显示一条,dstat 5 10 表示没 5s 显示一条,一共显示 10 条。

下面对显示出来的部分信息作一些说明: 

cpu:hiq、siq 分别为硬中断和软中断次数。

system:int、csw 分别为系统的中断次数(interrupt)和上下文切换(context switch)。 

其他的都很好理解。

Procs

r: 运行的和等待 (CPU 时间片) 运行的进程数,这个值也可以判断是否需要增加 CPU(长期大于 1)

b: 处于不可中断状态的进程数,常见的情况是由 IO 引起的

Memory

swpd: 切换到交换内存上的内存 (默认以 KB 为单位)。如果 swpd 的值不为 0,或者还比较大,比如超过 100M 了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。

free: 空闲的物理内存

buff: 作为 buffer cache 的内存,对块设备的读写进行缓冲

cache: 作为 page cache 的内存, 文件系统的 cache。如果 cache 的值大的时候,说明 cache 住的文件数多,如果频繁访问到的文件都能被 cache 住,那么磁盘的读 IO bi 会非常小。

Swap

si: 交换内存使用,由磁盘调入内存

so: 交换内存使用,由内存调入磁盘

内存够用的时候,这 2 个值都是 0,如果这 2 个值长期大于 0 时,系统性能会受到影响。磁盘 IO 和 CPU 资源都会被消耗。

我发现有些朋友看到空闲内存 (free) 很少或接近于 0 时,就认为内存不够用了,实际上不能光看这一点的,还要结合 si,so,如果 free 很少,但是 si,so 也很少 (大多时候是 0),那么不用担心,系统性能这时不会受到影响的。

磁盘 IO

bi: 从块设备读入的数据总量 (读磁盘) (KB/s)

bo: 写入到块设备的数据总理 (写磁盘) (KB/s)

注: 随机磁盘读写的时候,这 2 个 值越大(如超出 1M),能看到 CPU 在 IO 等待的值也会越大

System

in: 每秒产生的中断次数

cs: 每秒产生的上下文切换次数

上面这 2 个值越大,会看到由内核消耗的 CPU 时间会越多

Cpu

usr: 用户进程消耗的 CPU 时间百分比

us 的值比较高时,说明用户进程消耗的 CPU 时间多,但是如果长期超过 50% 的使用,那么我们就该考虑优化程序算法或者进行加速了 (比如 PHP/Perl)

sys: 内核进程消耗的 CPU 时间百分比

sys 的值高时,说明系统内核消耗的 CPU 资源多,这并不是良性的表现,我们应该检查原因。

wai: IO 等待消耗的 CPU 时间百分比

wa 的值高时,说明 IO 等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈 (块操作)。

idl: CPU 处在空闲状态时间百分比

命令格式

dstat [-afv] [options..] [delay [count]]

命令选项
Options    Details
-c, - -cpu    开启cpu统计
-C    该选项跟cpu的编号(0~cpu核数-1,多个用都好隔开)如:0,3,total表示分别包含cpu0、cpu3和total
-d, - -disk    开启disk统计
-D    改选跟具体的设备名(多个用逗号隔开)如:total,hda,hdb表示分别统计total、hda、hdb设备块
-g, - -page    开启分页统计
-i, - -int    开启中断统计
-I 5,10    没弄懂呢~巴拉巴拉
-l, - -load    开启负载均衡统计,分别是1m,5m,15m
-m, - -mem    开启内存统计,包括used,buffers,cache,free
-n, - -net    开启net统计,包括接受和发送
-N    该选项可以跟网络设备名多个用逗号隔开,如eth1,total
-p, - -proc    开启进程统计,包括runnable, uninterruptible, new
-r, - -io    io开启请求统计,包括read requests, write requests
-s, - -swap    开启swap统计,包括used, free
-S    该选项可以跟具体的交换区,多个用逗号隔开如swap1,total
-t, - -time    启用时间和日期输出
-T, - -epoch    启用时间计数,从epoch到现在的秒数
-y, - -sys    开启系统统计,包括中断和上下文切换
- -aio    开启同步IO统计 (asynchronous I/O)
- -fs    开启文件系统统计,包括 (open files, inodes)
- -ipc    开启ipc统计,包括 (message queue, semaphores, shared memory)
- -lock    开启文件所统计,包括 (posix, flock, read, write)
- -raw    开启raw统计 (raw sockets)
- -socket    开启sockets统计,包括 (total, tcp, udp, raw, ip-fragments)
- -tcp    开启tcp统计,包括(listen, established, syn, time_wait, close)
- -udp    开启udp统计 (listen, active)
- -unix    开启unix统计(datagram, stream, listen, active)
- -vm    开启vm统计 (hard pagefaults, soft pagefaults, allocated, free)
- -stat    通过插件名称开启插件扩展,详见命令插件 :可能的内置插件为aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, time,udp, unix, vm
- -list    列举内置插件扩展的名称
-a, - -all    是默认值相当于 -cdngy (default)
-f, - -full    相当于 -C, -D, -I, -N and -S
-v, - -vmstat    相当于 -pmgdsc -D total
- -bw, - -blackonwhite    在白色背景终端上改变显示颜色
- -float    在屏幕上的输出强制显示为浮点值(即带小数)(相反的选项设置为 - -integer)
- -integer    在屏幕上的输出强制显示为整数值,此为默认值(相反的选项设置为- -float)
- -nocolor    禁用颜色(意味着选项 - -noupdate)
- -noheaders    禁止重复输出header,默认会打印一屏幕输出一次header
- -noupdate    当delay>1时禁止在过程中更新(即在时间间隔内不允许更新)
- -output file    输出结果到cvs文件中
命令参数
参数名称    参数描述
delay    两次输出之间的时间间隔,默认是1s
count    报告输出的次数,默认是没有限制,一直输出知道ctrl+c


命令插件
虽然anyone可以自由的为dstat编写插件,但dstat附带大量的插件已经大大扩展其功能,下面是dstat附带插件的一个概述:

插件名称    插件描述
- -battery    电池电池百分比(需要ACPI)
- -battery-remain    电池剩余小时、分钟(需要ACPI)
- -cpufreq    CPU频率百分比(需要ACPI)
- -dbus    dbus连接的数量(需要python-dbus)
- -disk-util    显示某一时间磁盘的忙碌状况
- -fan    风扇转速(需要ACPI)
- -freespace    每个文件系统的磁盘使用情况
- -gpfs    gpfs读/写 I / O(需要mmpmon)
- -gpfs-ops    GPFS文件系统操作(需要mmpmon)
- -helloworld    dstat插件Hello world示例
- -innodb-buffer    显示innodb缓冲区统计
- -innodb-io    显示innodb I / O统计数据
- -innodb-ops    显示innodb操作计数器
- -lustre    显示lustreI / O吞吐量
- -memcache-hits    显示memcache 的命中和未命中的数量
- -mysql5-cmds    显示MySQL5命令统计
- -mysql5-conn    显示MySQL5连接统计
- -mysql5-io    MySQL5 I / O统计数据
- -mysql5-keys    显示MySQL5关键字统计
- -mysql-io    显示MySQL I / O统计数据
- -mysql-keys    显示MySQL关键字统计
- -net-packets    显示接收和发送的数据包的数量
- -nfs3    显示NFS v3客户端操作
- -nfs3-ops    显示扩展NFS v3客户端操作
- -nfsd3    显示NFS v3服务器操作
- -nfsd3-ops    显示扩展NFS v3服务器操作
- -ntp    显示NTP服务器的ntp时间
- -postfix    显示后缀队列大小(需要后缀)
- -power    显示电源使用量
- -proc-count    显示处理器的总数
- -rpc    显示rpc客户端调用统计
- -rpcd    显示RPC服务器调用统计
- -sendmail    显示sendmail队列大小(需要sendmail)
- -snooze    显示每秒运算次数
- -test    显示插件输出
- -thermal    热系统的温度传感器
- -top-bio    显示消耗块I/O最大的进程
- -top-cpu    显示消耗CPU最大的进程
- -top-cputime    显示使用CPU时间最大的进程(单位ms)
- -top-cputime-avg    显示使用CPU时间平均最大的进程(单位ms)
- -top-io    显示消耗I/O最大进程
- -top-latency    显示总延迟最大的进程(单位ms)
- -top-latency-avg    显示平均延时最大的进程(单位ms)
- -top-mem    显示使用内存最大的进程
- -top-oom    显示第一个被OOM结束的进程
- -utmp    显示utmp连接的数量(需要python-utmp)
- -vmk-hba    显示VMware ESX内核vmhba统计数
- -vmk-int    显示VMware ESX内核中断数据
- -vmk-nic    显示VMware ESX内核端口统计
- -vz-io    显示每个OpenVZ请求CPU使用率
- -vz-ubc    显示OpenVZ用户统计
- -wifi    无线连接质量和信号噪声比
常用插件
插件名称    插件描述
- -disk-util    显示某一时间磁盘的忙碌状况
- -freespace    显示当前磁盘空间使用率
- -proc-count    显示正在运行的程序数量
- -top-bio    显示块I/O最大的进程
- -top-cpu    显示CPU占用最大的进程
- -top-io    显示正常I/O最大的进程
- -top-mem    显示占用最多内存的进程

举一些例子:

内存资源使用情况:

dstat -glms --top-mem

top-mem

CPU资源使用情况:

dstat -cyl --proc-count --top-cpu

tom-cpu

输出一个csv文件:

dstat --output ~/test.csv

outputfile

如想监控 swap,process,sockets,filesystem 并显示监控的时间:

若要将结果输出到文件可以加 --output filename:

这样生成的 csv 文件可以用 excel 打开,然后生成图表。

通过 dstat --list 可以查看 dstat 能使用的所有参数,其中上面 internal 是 dstat 本身自带的一些监控参数,下面 /usr/share/dstat 中是 dstat 的插件,这些插件可以扩展 dstat 的功能,如可以监控电源(battery)、mysql 等。 

下面这些插件并不是都可以直接使用的,有的还依赖其他包,如想监控 mysql,必须要装 python 连接 mysql 的一些包。

常见问题:
1、cpu分组中”wait”,如果一直处于高使用率,那说明系统存在一些其它问题。当CPU的状态处在”waits”时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。
2、CPU的使用情况是否正常:用户态和内核态的使用是否合理;总体占比是否合理;若不合理可以用dstat对应的插件(- -top-cpu)排查最耗CPU的进程,配合mpstat、top再去下钻一下分析线程,进一步到程序(比如java可以jstack)。
3、磁盘IO读写是否正常:读写是否偏大;若不正常可以配合插件- -disk-util、- -freespace、- -top-bio、- -top-io等进行排查,也可以配合iostat排查
3、内存是否正常:一般要配合交换区内存一起判断,若不正常可以配合插件- -top-mem,可能是开启的进程太多,或者第三方程序捣乱。
4、应用程序内存是否正常:配合业务表现比如请求响应慢、没反应等,在结合第三方程序监控(如java可以用jvm监控工具(jprofiler、jconsole、jvisualvm……)监控内存)此种情况和3还不太一样,一个jvm内存一个sys内存
5、分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值都是0。
6、系统统计仅在有比较基线时才有意义。中断和上下文切换较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
7、使用不同的插件可以快速排查有问题的进程然后配合其他工具下钻具体问题,当然这个需要建立在你对所有的插件都比较熟悉的基础之上,知道什么情况下使用什么插件。技巧:可以将常用的命令写成脚本,执行分析,这样就不用每次都敲了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章