`

(转)从dstat理解Linux性能监控体系

 
阅读更多
http://calvin1978.blogcn.com/articles/dstat.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

聪明的同学在性能测试时,一边盯着监控一边自己在想:

“如果有200毫秒的CPU瞬时高峰,会被抓住么?”
“我再加上这个监控项,或者我让采样间隔再密一点,会影响性能么”

dstat用地球人都看得懂的python来写,而且只有寥寥数行,很适合从它入手,了解所有top, vmstat,pidstat们的工作原理,回答上面的问题。



1. dstat简介

系统性能的监控工具,我首选dstat,用过的同学也都喜欢,因为:

dstat可以认为是vmstat,iostat等的合体,不像vmstat还缺个网络流量数据。
dstat有良好的对齐和单位转换,不像vmstat一堆数字看到脖子都歪了。
安装
一般yum install dstat, 或者从官网下载最新版解压即用。

使用
我最喜欢的指令是 "dstat -tamp"

t: 时间
a: 一个缩写合集,包括CPU(-c), 磁盘IO(-d),网络流量(-n), Swap page in/out(-g), 系统的中断和上下文切换(-y)
如果用bond0绑定了两块网卡,bond0与eth0+eth1会重复算,需要把值劈一半,或者用-N bond0 这样单拧出来。
如果想监控不同磁盘,可以-D sda,sdb,total
m: 内存
p: 进程数 (在运行的,被阻塞的,新增的)


2.实现原理

dstat的地球人都看得懂的代码在此:

https://github.com/dagwieers/dstat/blob/master/dstat#L602

CPU信息
阅读第一段,关于CPU的采集插件,哦,原来完全是靠读取 /proc/stat 文件的数据。

$ cat /proc/stat
cpu 179165222 1067 67744298 9464596822 89694 31726 17296810 0 0
cpu0 13417559 30 4926156 385849929 39813 5 245082 0 0
cpu1 5972603 19 2536549 395562123 2953 0 70426 0 0
…..
关于CPU的几列数字分别是user,nice,system,idle,iowait....等状态的cpu时间统计,值是从开机到现在的累计值,单位是1/100秒。

顺便再瞄一下,/proc目录下还有/proc/[pid]/stat,那是每个进程的CPU统计。

既然/proc/stat 文件长这样,那top啊,mpstat, pidstat啊,CPU信息估计也是这么读出来的没跑了,《性能之巅》里用strace追踪vmstat也证实了这点。

回答问题时间
现在,第一个问题可以回答了,dstat每秒读取一下这个CPU累计值,然后减去前一秒的累计值,就得到这一秒内的平均值——所以200毫秒内的CPU高峰是抓不到的,只有平均值。

第二个问题,这监控的消耗大么?
首先,/proc目录是个伪文件系统,数据其实是在内存之中,只是通过文件形式来暴露,让你可以通过cat命令,或open file这类系统调用来读取(这种风格是Unix的基因,详见《Unix编程的艺术》),读取这么一下内存的消耗很低。

而且,dstat是一开始就打开了/proc/stat文件,不会每秒钟都重复打开。当然,像top,pidstat, 或者dstat里比如top-*插件,就会每次打开每个活动进程的stat文件,那消耗会大些。

通过pidstat的监控,dstat自身的消耗也就是一个CPU核的1%,pidstat也是一个核的1%,top略大,所以有人说压测时不要开top。

有些聪明的同学可能闪电般又有第三个问题,那这个/proc/stat文件什么时候更新?一秒一次么?

因为/proc是个伪文件系统,本质是API接口,所以并不存在“更新”这个概念,每次读取该文件时,调用sysconf(_SC_CLK_TCK)来获取,返回内存中的metrics值(或者如果需要实时统计的就统计一下)

/proc目录
关于/proc目录,linux自己已经有详细文档:http://man7.org/linux/man-pages/man5/proc.5.html,《性能之巅》4.2章 观测来源里也有描述。

我够懒的话,写到这里已经可以停笔了,大家自己去读它就可以了。为了凑字数,继续吧。。。。



3. 多余的话

其他系统级别信息
新增/运行/堵塞进程数量 ,系统上下文切换,中断次数在/proc/stat,其中新增进程是靠累计进程数的差值得来。

磁盘信息,都在/proc/diskstats, 包括所有iostats用到的详细信息, 详见Documentation/iostatts.txt

内存信息,都在/proc/meminfo,还包括默认没显示的dirty page cached 大小等。

Swap page in/out 信息,在/proc/vmstat

网络流量信息, 在/proc/net/dev

tcp socket状态的统计,在/proc/net/tcp

系统负载的统计(类似uptime),在/proc/loadavg

进程级别信息
每个进程的信息,留意下面几个:
/proc/[pid]/stat 与status: TOP看的进程信息多在这里, status对人类友好些。
/proc/[pid]/cmdline: 完整的命令行参数
/proc/[pid]/environ: 完整的实际生效的环境变量

线程级别的信息
/proc/[pid]/task/[tid]/stat,如果top 或 pidstat里选择显示进程信息,就会再把所有进程目录下的线程子目录一一打开,消耗会更大。

继续偷懒,直接看参考资料吧。
分享到:
评论

相关推荐

    性能监控工具dstat

    dstat-rpm安装包,安装 :rpm -ivh+包名 。 常用dstat命令:dstat -cdmn;dstat --output /home/100bf.csv --cdmn 3;等

    关于linux性能监控的详细介绍

    Linux性能监控是优化系统效率和稳定性的关键环节,尤其在网络子系统方面,因为网络的抽象性和外部因素的不可控性,使得监控变得尤为复杂。在Linux中,性能监控的目标是发现系统的瓶颈,并通过调整系统参数来消除这些...

    dstat-master.tar.gz

    《深入理解dstat工具:全面监控Linux系统资源》 在Linux操作系统中,了解系统的资源使用情况对于优化系统性能、排查问题至关重要。dstat是这样一个强大的工具,它允许我们实时监控CPU、内存、磁盘和网络等关键资源...

    dstat监控工具

    **dstat监控工具详解** dstat是一款强大的系统资源监控工具,它能够实时地显示系统CPU、内存、磁盘I/O、网络I/O等关键性能指标。dstat比传统的top、iostat...合理利用dstat,可以帮助我们更好地理解和优化系统的性能。

    dstat磁盘性能检测工具

    dstat磁盘性能检测工具

    dstat-0.7.2.zip

    《Linux环境下dstat监控工具详解及应用实践》 在Linux系统管理与优化过程中,实时监控系统资源的使用情况至关重要。其中,对于网络流量和磁盘性能的监测是尤为关键的一环,这有助于我们及时发现并解决系统瓶颈,...

    Linux性能优化大师.pdf

    1. **监控工具**:书中会介绍一系列用于系统监控的命令行工具,如top、vmstat、iostat、mpstat、dstat等,它们可以帮助我们实时查看CPU、内存、磁盘I/O、网络等资源的使用情况。 2. **进程管理**:理解进程的工作...

    linux 性能调优 linux performance truning

    6. **性能监控工具**:书中会列举并解释多种性能监控工具,如`vmstat`、`sar`、`dstat`、`strace`、`lsof`等,帮助读者实时检测系统状态,定位性能瓶颈。 7. **性能分析**:这部分可能涉及如何使用`perf`、`gprof`...

    LINUX性能调优方法总结

    1. **系统监控工具**:了解并使用如`top`, `htop`, `vmstat`, `iostat`, `mpstat`, `free`, `dstat`等工具来监控系统CPU、内存、磁盘I/O和网络活动,这些都是性能调优的基础。 2. **进程管理**:分析高CPU或内存...

    linux系统常用监控工具整理

    本文将详细介绍几种常用的Linux性能监控工具,帮助你更好地理解系统状态并解决潜在问题。 1. **top** `top`命令是最基本的实时性能监控工具,它显示系统总体的CPU、内存使用情况,以及每个进程的资源占用状况。你...

    dstat-0.7.2-12.el7.noarch.rpm

    dstat工具Linux安装包

    linux redhat dstat rpm

    linux redhat dstat rpm

    Linux 全能系统监控工具dstat的实例详解

    【Linux全能系统监控工具dstat详解】 dstat是一款强大的系统监控工具,它集成了vmstat、iostat、netstat和ifstat等多个命令的功能,同时...通过熟练掌握dstat的使用,IT专业人士可以更好地理解和优化Linux系统的性能。

    Linux性能测试指令集.rar

    了解并熟练使用这些命令,可以有效地监控和分析Linux系统的性能,找出可能的瓶颈,从而优化系统配置和提升运行效率。通过"Linux性能测试常用指令集(一).doc"文档,你可以获得更具体的使用方法和案例分析,进一步...

    linux redhat dstat rpm 0.7.3

    linux redhat dstat rpm 0.7.3

    linux redhat dstat rpm 0.7.4

    linux redhat dstat rpm 0.7.4

    dstat-0.7.2-1.el6.rfx.noarch.rpm

    dstat-0.7.2-1.el6.rfx.noarch.rpm ,linux系统监控工具dstsat

    dstat-0.7.2-12.el7.noarch.rpm (dstat 之rpm包)

    标题提及的是“dstat-0.7.2-12.el7.noarch.rpm”,这是一个针对Linux操作系统的性能监控工具——dstat的RPM(Red Hat Package Manager)包。RPM是一种软件包管理器,常用于基于RPM的Linux发行版,如CentOS、Fedora和...

Global site tag (gtag.js) - Google Analytics