嵌入式 Linux下比较全面的监控工具dstat

2019-07-12 14:44发布

监测界面各参数含义(部分)  

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处在空闲状态时间百分比

1) 工具说明

dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩 {MOD}的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是, dstat也可以收集指定的性能资源, 譬如 dstat -c 即显示CPU的使用情况.
 下载安装文件dstat-0.6.7-1.el*.rf.noarch.rpm: http://dag.wieers.com/rpm/packages/dstat/

2) 软件安装

# cd /tmp
# rz (上传安装包)
# rpm -Uvh dstat-0.6.7-1.el*.rf.noarch.rpm
# which dstat
 /usr/bin/dstat

3) 使用示例

# dstat
 安装完成后, 执行 dstat 命令, 默认情况它会收集-cpu-,-disk-,-net-,-paging-,-system-的数据, 一秒钟收集一次. 默认输入dstat等于输入了dstat -cdngy 1或dstat -a 1. 推荐使用 date && dstat -tclmdny 60 一分钟监视一次(注意调节显示的宽度, 或去掉-t选项).

4) dstat 选项

-c, -cpu 显示CPU情况
-C 0,3,total include cpu0, cpu3 and total
-d, -disk 显示磁盘情况
-D total,hda include hda and total
-g, -page enable page stats
-i, -int enable interrupt stats
-I 5,eth2 include int5 and interrupt used by eth2
-l, -load enable load stats
-m, -mem 显示内存情况
-n, -net 显示网络情况
-N eth1,total 可以指定网络接口
-p, -proc enable process stats
-s, -swap 显示swap情况
-S swap1,total 可以指定多个swap
-t, -time enable time counter
-y, -sys enable system stats
-ipc 报告IPC消息队列和信号量的使用情况
-lock enable lock stats
-raw enable raw stats
-tcp enable tcp stats
-udp enable udp stats
-unix enable unix stats
-M stat1,stat2 enable external stats
-mods stat1,stat2
-a, -all 使用-cdngy 缺省的就是这样显示
-f, -full 使用 -C, -D, -I, -N and -S 显示
-v, -vmstat 使用-pmgdsc -D 显示
-integer show integer values
-nocolor disable colors (implies -noupdate)
-noheaders 只显示一次表头以后就不显示了,使用重定向写入文件时很有用
-noupdate disable intermediate updates
-output file 写入到CVS文件中
这个软件和vmstat很像, 不过和vmstat相比好像少了io部份的显示, dstat只能显示磁盘的吞吐量而不是显示负载情况, dstat和几乎所有监控软件一样, 只能对整个系统进行监控而不能对某一个进程或某一个程序进行深入分析. 我常使用的参数是dstat -cdlmnpsy, 做个别名链接alias dstat='dstat -cdlmnpsy'
dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。 dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)。 dstat将以列表的形式为你提供选项信息并清晰地告诉你是在何种幅度和单位显示输出。这样更好地避免了信息混乱和误报。更重要的是,它可以让你更容易编写插件来收集你想要的数据信息,以从未有过的方式进行扩展。 Dstat的默认输出是专门为人们实时查看而设计的,不过你也可以将详细信息通过CSV输出到一个文件,并导入到Gnumeric或者Excel生成表格中。

特性

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

安装方法

Ubuntu/Mint和Debin系统: 本地软件库中有相关安装包,你可以用下面命令安装:
  1. # sudo apt-get install dstat
RHEL/Centos和Fedora系统: 你可以在romforge软件库中添加有相关安装包,参照指导,使用如下命令很简单就能进行安装:
  1. # yum install dstat
ArchLinux系统: 相关软件包在社区资源库中,你可以用这个命令来安装:
  1. # pacman -S dstat

使用方法

dstat的基本用法就是输入dstat命令,输出如下: 这是默认输出显示的信息: CPU状态:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。 磁盘统计:磁盘的读写操作,这一栏显示磁盘的读、写总数。 网络统计:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。 分页统计:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。 系统统计:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。 默认情况下,dstat每秒都会刷新数据。如果想退出dstat,你可以按"CTRL-C"键。 需要注意的是报告的第一行,通常这里所有的统计都不显示数值的。 这是由于dstat会通过上一次的报告来给出一个总结,所以第一次运行时是没有平均值和总值的相关数据。 但是dstat可以通过传递2个参数运行来控制报告间隔和报告数量。例如,如果你想要dstat输出默认监控、报表输出的时间间隔为3秒钟,并且报表中输出10个结果,你可以运行如下命令:
  1. dstat 3 10
在dstat命令中有很多参数可选,你可以通过man dstat命令查看,大多数常用的参数有这些:
  • -l :显示负载统计量
  • -m :显示内存使用率(包括used,buffer,cache,free值)
  • -r :显示I/O统计
  • -s :显示交换分区使用情况
  • -t :将当前时间显示在第一行
  • –fs :显示文件系统统计数据(包括文件总数量和inodes值)
  • –nocolor :不显示颜 {MOD}(有时候有用)
  • –socket :显示网络统计数据
  • –tcp :显示常用的TCP统计
  • –udp :显示监听的UDP接口及其当前用量的一些动态数据
当然不止这些用法,dstat附带了一些插件很大程度地扩展了它的功能。你可以通过查看/usr/share/dstat目录来查看它们的一些使用方法,常用的有这些:
  • -–disk-util :显示某一时间磁盘的忙碌状况
  • -–freespace :显示当前磁盘空间使用率
  • -–proc-count :显示正在运行的程序数量
  • -–top-bio :指出块I/O最大的进程
  • -–top-cpu :图形化显示CPU占用最大的进程
  • -–top-io :显示正常I/O最大的进程
  • -–top-mem :显示占用最多内存的进程
举一些例子: 查看全部内存都有谁在占用:
  1. dstat -g -l -m -s --top-mem
显示一些关于CPU资源损耗的数据:
  1. dstat -c -y -l --proc-count --top-cpu

如何输出一个csv文件

想输出一个csv格式的文件用于以后,可以通过下面的命令:
  1. # dstat –output /tmp/sampleoutput.csv -cdn