温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Linux 下使用iostat命令生成CPU和I/O的统计报告

发布时间:2020-06-15 06:17:25 来源:网络 阅读:5298 作者:linux_python 栏目:移动开发

 查看系统状态vmstat

[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 418416   7392  36796    0    0    37     2   34   22  0  2 97  1  0
 [root@localhost ~]# vmstat 1  //每一秒显示一次
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 418416   7400  36796    0    0    36     2   34   21  0  2 97  1  0
 0  0      0 418408   7400  36796    0    0     0     0   14    9  0  0 100  0  0

r run  可以理解为1秒钟之内有几个进程占用CPU
b  等待资源(磁盘或内存)的进程数,b越大磁盘压力越大
swpd  有多少块被交换了(当内存不够的时候),当数值不大且固定可以不用管
free  有多少剩余的内存,单位是K
buffer  缓冲,从内存读出来放入磁盘中
cache  缓存,从磁盘读出来放入内存当中
si   写入内存
so 从内存读出来
bi  读磁盘,写进内存
bo  从内存读出来,写入磁盘
in
cs 上下文切换次数
us用户态的进程
sy系统态的进程
id  CPU处于空闲的百分比
wa 输入输出等待所占CPU的包粉笔
st 被偷走cpu的百分比



iostat通过观察设备的活跃时间和他们平均传输率之间的关系来监视系统的输入/输出设备负载。iostat生成的报告可以用于修改系统配置从而更好在物理硬盘间平衡输入/输出的报告。

安装 iostat

 yum install sysstat

要运行它,只需在控制台下输入iostat

Linux 下使用iostat命令生成CPU和I/O的统计报告

第一部分包含了CPU报告

  • %user : 显示了在执行用户(应用)层时的CPU利用率

  • %nice : 显示了在以nice优先级运行用户层的CPU利用率

  • %system : 显示了在执行系统(内核)层时的CPU利用率

  • %iowait : 显示了CPU在I/O请求挂起时空闲时间的百分比

  • %steal : 显示了当hypervisor正服务于另外一个虚拟处理器时无意识地等待虚拟CPU所占有的时间百分比。

  • %idle : 显示了CPU在I/O没有挂起请求时空闲时间的百分比

第二部分包含了设备利用率报告

  • Device : 列出的/dev 目录下的设备/分区名称

  • tps : 显示每秒传输给设备的数量。更高的tps意味着处理器更忙。

  • Blk_read/s : 显示了每秒从设备上读取的块的数量(KB,MB)

  • Blk_wrtn/s : 显示了每秒写入设备上块的数量(KB,MB)

  • Blk_read : 显示所有已读取的块

  • Blk_wrtn : 显示所有已写入的块

默认上,iostat以B为单位衡量I/O系统。为了更便于阅读,我们可以iostat将报告转换成以KB或者MB为单位。只需要加入-k参数来创建以KB为单位-m参数来创建以MB为单位

Linux 下使用iostat命令生成CPU和I/O的统计报告

要扩展报告,我们可以在iostat后面跟上-x选项

Linux 下使用iostat命令生成CPU和I/O的统计报告

rrqm/s: 每秒这个设备相关的读取请求有多少被Merge(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)。

wrqm/s: 每秒这个设备相关的写入请求有多少被Merge了。

r/s: 每秒读取设备的量。

w/s:每秒写设备的量。

rsec/s: 每秒读取的扇区数。

wsec/s: 每秒写入的扇区数。

avgqu-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)

avgqu-sz:平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).

await:平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)

svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)

%util:  一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的.即 delta(use)/s/1000 (因为use的单位为毫秒)

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈.


idle小于70% IO压力就较大了,一般读取速度有较多的wait.同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高),另外 await 的参数也要多和 svctm 来参考.差的过高就一定有 IO 的问题.

avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高.也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的.


带延迟使用iostat

和vmstat一样,作为一个统计工具,最好带延迟参数来使用它。通过延迟参数,我们可以看到趋势。这里有一些带延时运行iostat的示例。

以MB为单位,2秒间隔,运行3次的方式运行iostat

Linux 下使用iostat命令生成CPU和I/O的统计报告

只显示CPU报告,并以3秒为间隔,报告4次

Linux 下使用iostat命令生成CPU和I/O的统计报告

mpstat也可以查看cpu相关情况

Linux 下使用iostat命令生成CPU和I/O的统计报告

显示sda1和sda2的设备报告,以2秒为间隔,报告3次

[root@SERVER-Test ~]# iostat -d sda1 sda2 2 3
Linux 2.6.32-358.18.1.el6.x86_64 (SERVER-Test)  2014年04月08日     _x86_64_    (4 CPU)
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda1              0.00         0.39         0.01    3078694      46236
sda2             18.73        94.97       992.08  742920998 7760567792
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda1              0.00         0.00         0.00          0          0
sda2              3.50         0.00        60.00          0        120
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda1              0.00         0.00         0.00          0          0
sda2              4.50         4.00       116.00          8        232

文件

iostat使用这些文件来创建报告。

/proc/stat 包含了系统统计

/proc/partitions 包含磁盘统计

/proc/diskstats 包含磁盘统计

/sys 包含块设备统计

总结

vmstat用于监视内存使用,iostat用于监视CPU使用率和I/O系统,这样我们就有了完整的工具来监视你机器中三个重要的组件。在控制台下输入man iostat就可进入iostat手册界面。

[root@SERVER-Test ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  5 861712 280288 496656 19368480    0    0    12   124    1    0  3  1 95  2  0
[root@SERVER-Test ~]#

输出信息简介
r: 运行的和等待运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)

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

w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间

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

free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,单位:KB

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


Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒

内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。(常有人看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。)


IO
bi: 发送到块设备的块数,单位:块/秒
随机磁盘读写的时候,这2个值越大(如超出1M),能看到CPU在IO等待的值也会越大bo: 从块设备接收到的块数,单位:块/秒


System
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数

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


CPU 按 CPU 的总使用百分比来显示
us:用户进程消耗的CPU时间百分比,值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了

sy: CPU 系统使用时间,内核进程消耗的CPU时间百分比,值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。

id: 闲置时间

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



Linux操作系统下如何正确查看Raid信息

有些情况下系统不是自己装的,raid也不是自己配置的,远程登录系统后可能就不知道系统是否有做raid,raid级别?因此稍微总结一下Linux下查看软、硬raid信息的方法。


  软件raid:只能通过Linux系统本身来查看


  cat /proc/mdstat


  可以看到raid级别,状态等信息。


  硬件raid: 最佳的办法是通过已安装的raid厂商的管理工具来查看,有cmdline,也有图形界面。如Adaptec公司的硬件卡就可以通过下面的命令进行查看:


  # /usr/dpt/raidutil -L all


  可以看到非常详细的信息。


  当然更多情况是没有安装相应的管理工具,只能依靠Linux本身的话一般我知道的是两种方式:


  # dmesg |grep -i raid


  # cat /proc/scsi/scsi


  显示的信息差不多,raid的厂商,型号,级别,但无法查看各块硬盘的信息。


  另外经过实际测试,Dell的服务器可以通过命令来显示,而HP、IBM等的服务器通过上面的命令是显示不出的。只能够通过装硬件厂商的管理工具来查看。


使用MegaCli等工具查看Raid磁盘阵列状态

命令使用:
MegaCli -LDInfo -Lall -aALL 查raid级别
MegaCli -AdpAllInfo -aALL 查raid卡信息
MegaCli -PDList -aALL 查看硬盘信息
MegaCli -AdpBbuCmd -aAll 查看电池信息
MegaCli -FwTermLog -Dsply -aALL 查看raid卡日志

MegaCli常用参数介绍
MegaCli -adpCount 【显示适配器个数】
MegaCli -AdpGetTime –aALL 【显示适配器时间】
MegaCli -AdpAllInfo -aAll  【显示所有适配器信息】
MegaCli -LDInfo -LALL -aAll  【显示所有逻辑磁盘组信息】
MegaCli -PDList -aAll  【显示所有的物理信息】
MegaCli -AdpBbuCmd -GetBbuStatus -aALL |grep ‘Charger Status’ 【查看充电状态】
MegaCli -AdpBbuCmd -GetBbuStatus -aALL【显示BBU状态信息】
MegaCli -AdpBbuCmd -GetBbuCapacityInfo -aALL【显示BBU容量信息】
MegaCli -AdpBbuCmd -GetBbuDesignInfo -aALL  【显示BBU设计参数】
MegaCli -AdpBbuCmd -GetBbuProperties -aALL  【显示当前BBU属性】
MegaCli -cfgdsply -aALL  【显示Raid卡型号,Raid设置,Disk相关信息】


atop命令使用

Atop 是一个基于 ASCII 的全屏的性能监控工具,可用来监控进程的活动时间,高亮显示出一些过载的进程,还包括其他的一些系统指标例如:CPU、内存、交换分区、磁盘和网络等信息。

安装



wget http://www.atoptool.nl/download/atop-2.0.2.tar.gz
tar zxvf atop-2.0.2.tar.gz
cd atop-2.0.2
make && make install


在安装atop之后,系统会在/var/log/atop目录下记录atop日志文件,我们在命令行下敲入atop"命令也可看到系统当前的运行情况.

Linux 下使用iostat命令生成CPU和I/O的统计报告

ATOP列:该列显示了主机名、信息采样日期和时间点


PRC列:该列显示进程整体运行情况

sys、usr字段分别指示进程在内核态和用户态的运行时间

#proc字段指示进程总数

#zombie字段指示僵死进程的数量

#exit字段指示atop采样周期期间退出的进程数量


CPU列:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲)

sys、usr显示进程在内核态、用户态所占CPU的时间比例

irq字段指示CPU被用于处理中断的时间比例

idle字段指示CPU处在完全空闲状态的时间比例

wait字段指示CPU处在进程等待磁盘IO导致CPU空闲状态的时间比例

CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。

cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%


CPL列:该列显示CPU负载情况

avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量

csw字段指示上下文交换次数

intr字段指示中断发生次数


MEM列:该列指示内存的使用情况

tot字段指示物理内存总量

free字段指示空闲内存的大小

cache字段指示用于页缓存的内存大小

buff字段指示用于文件缓存的内存大小

slab字段指示系统内核占用的内存大小


SWP列:该列指示交换空间的使用情况

tot字段指示交换区总量

free字段指示空闲交换空间大小


PAG列:该列指示虚拟内存分页情况

swin、swout字段:换入和换出内存页数


DSK列:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息

sda字段:磁盘设备标识

busy字段:磁盘忙时比例

read、write字段:读、写请求数量


NET列:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息

XXXi? 字段指示各层或活动网口收包数目

XXXo 字段指示各层或活动网口发包数目


1)默认视图

进入atop信息界面,我们看到的就是进程信息的默认视图(上图下半部分),按g键可以从其他视图跳到默认视图。

2)内存视图

内存视图展示了进程使用内存情况,按m键可进入内存视图。

3)命令视图(Command line)

按c键我们可以进入命令视图,该视图展示了与每个进程相对应的命令。

4)d   ——磁盘相关输出         n   ——网络相关输出

5)atop日志

每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用"atop -r XXX"命令对日志文件进行查看。

#cd /var/log/atop/ (进入atop日志所在路径)
# ll
total 21832
-rw-r--r-- 1 root root 5111271 2013-06-30 00:00 atop_20140329
-rw-r--r-- 1 root root 5161400 2013-07-01 00:00 atop_20140330
# atop -r atop_20140329 (分析历史日志文件)

对于atop日志文件的保存方式,我们可以这样:

每天保存一个atop日志文件,该日志文件记录当天信息

日志文件以"atop_YYYYMMDD"的方式命名

设定日志失效期限,自动删除一段时间前的日志文件

其实atop开发者已经提供了以上日志保存方式,相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中,我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为3天)

(sleep 3; find$LOGPATH -name'atop_*'-mtime+3?-exec rm {} \;)&

?

最后,我们修改cron文件,每天凌晨执行atop.daily脚本:

0*** root /etc/atop /atop.daily


可以参考:http://blog.jiunile.com/iftop%E3%80%81iotop%E3%80%81htop%E3%80%81atop%E4%BB%8B%E7%BB%8D.html


Linux iostat命令输出简要说明 http://www.linuxidc.com/Linux/2013-06/86703.htm

Linux iostat命令 http://www.linuxidc.com/Linux/2013-03/80163.htm

Linux iostat 命令详解 http://www.linuxidc.com/Linux/2012-03/55736.htm

实时系统监控工具mpstat 使用详解 http://www.linuxidc.com/Linux/2012-03/56676.htm


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI