当前位置首页 > Linux知识

性能监控|Linux监控--CPU、内存、I/OLinux监控--CPU、内存、I/O

阅读次数:373 次  来源:admin  发布时间:

阅读目录

CPU 内存 磁盘I/O 综合监控工具(含网络)--vmstat 超级监控工具--dstat 回到顶部 CPU

top命令能够实时监控系统的运行状态,并且可以按照CPU、内存和执行时间进行排序,同时top命令还可以通过交互式命令进行设定显示,通过top命令可以查看即时活跃的进行。

性能监控|Linux监控--CPU、内存、I/OLinux监控--CPU、内存、I/O

回到顶部 内存

free命令可以查看当前系统内存的使用情况

free -m以MB为单位显示系统内存的使用情况,同理,也可以使用-k、-g等其他的单位显示

free -m

性能监控|Linux监控--CPU、内存、I/OLinux监控--CPU、内存、I/O

回到顶部 磁盘I/O 磁盘的读写能力

iostat -x -m 1

性能监控|Linux监控--CPU、内存、I/OLinux监控--CPU、内存、I/O

1)指定采样时间间隔与采样次数

与sar命令一样,我们可以以”iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:

[patrickxu@vm1 ~]$ iostat -d 2 3
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1)   06/12/2017  _x86_64_    (8 CPU)

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrt

vda 0.45 0.29 8.10 6634946 183051408

vdb 0.12 3.11 30.55 70342034 689955328

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrt

vda 0.00 0.00 0.00 0 0

vdb 0.00 0.00 0.00 0 0

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrt

vda 1.50 0.00 12.00 0 24

vdb 0.00 0.00 0.00 0 0

以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。

2)以kB为单位显示读写信息(-k选项)/以mB为单位显示读写信息(-m选项)

我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:

[patrickxu@vm1 ~]$ iostat -d -k

Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1) 06/12/2017 x86_64 (8 CPU)

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrt

vda 0.45 0.15 4.05 3317473 91525980

vdb 0.12 1.56 15.27 35171017 344977664

以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)

3)更详细的io统计信息(-x选项)

为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:

linux # iostat -x -k -d 1

Linux 2.6.16.60-0.21-smp (linux) 06/13/12

……

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util

da 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60

以上各列的含义如下:

选项 说明 rrqm/s 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并 wrqm/s 每秒对该设备的写请求被合并次数 r/s 每秒完成的读次数 w/s 每秒完成的写次数 rkB/s 每秒读数据量(kB为单位) wkB/s 每秒写数据量(kB为单位) avgrq-sz 平均每次IO操作的数据量(扇区数为单位) avgqu-sz 平均等待处理的IO请求队列长度 await 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位) svctm 平均每次IO请求的处理时间(毫秒为单位) %util 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

对于以上示例输出,我们可以获取到以下信息:

- 每秒向磁盘上写30M左右数据(wkB/s值)

- 每秒有91次IO操作(r/s+w/s),其中以写操作为主体

- 平均每次IO请求等待时间为120.57毫秒,处理时间为6.33毫秒

- 等待处理的IO请求队列中,平均有11.79个请求驻留

实际查看时,一般结合着多个选项查看: 如iostat -dxm 3

[root@yg-uhost724 ~]# iostat -dxm 5

Linux 2.6.32-279.19.16.el6.ucloud.x86_64 (yg-uhost724) 06/12/2017 x86_64 (24 CPU)

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util

da 0.69 29.89 1.36 21.52 0.05 0.20 23.04 0.04 1.96 0.29 0.67

db 682.88 1811.86 77.94 417.73 2.97 8.71 48.27 0.01 0.03 0.10 4.89

dm-14 0.00 0.00 0.03 41.47 0.00 0.16 8.00 0.01 0.12 0.02 0.10

dm-0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 7.24 0.07 0.00

dm-2 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 0.07 0.04 0.00

dm-3 0.00 0.00 0.00 0.98 0.00 0.00 8.00 0.00 3.57 0.22 0.02

dm-5 0.00 0.00 0.18 50.51 0.00 0.20 8.00 0.03 0.44 0.01 0.07

dm-1 0.00 0.00 1.50 5.51 0.01 0.02 8.00 0.03 4.04 0.04 0.03

dm-6 0.00 0.00 123.23 1042.56 0.48 4.07 8.00 0.01 0.01 0.02 1.90

dm-4 0.00 0.00 635.74 1069.59 2.48 4.18 8.00 0.00 0.04 0.01 2.39

dc 7.23 106.32 0.52 0.94 0.03 0.42 627.54 0.02 13.32 17.58 2.58

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util

da 0.00 15.00 0.40 17.80 0.00 0.10 10.90 0.00 0.10 0.10 0.18

db 82.60 11967.00 414.60 2500.20 1.94 56.51 41.07 12.07 4.14 0.07 21.02

dm-14 0.00 0.00 0.00 0.20 0.00 0.00 8.00 0.00 0.00 0.00 0.00

dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

dm-3 0.00 0.00 0.00 1.80 0.00 0.01 8.00 0.00 0.11 0.11 0.02

dm-5 0.00 0.00 0.00 2.00 0.00 0.01 8.00 0.00 0.00 0.00 0.00

dm-1 0.00 0.00 0.00 2.40 0.00 0.01 8.00 0.01 4.17 1.25 0.30

dm-6 0.00 0.00 0.00 45.20 0.00 0.18 8.00 0.11 2.45 0.55 2.48

dm-4 0.00 0.00 497.20 14415.80 1.94 56.31 8.00 72.87 4.83 0.01 19.14

dc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0

说明:

rrqm/s:每秒进行 merge 的读操作数目.即 delta(rmerge)/

wrqm/s:每秒进行 merge 的写操作数目.即 delta(wmerge)/

%util: 一秒中有百分之多少的时间用于 I/O

如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷

idle小于70% IO压力就较大了,一般读取速度有较多的wait。

查看cpu状态

iostat -c 1 1

性能监控|Linux监控--CPU、内存、I/OLinux监控--CPU、内存、I/O

磁盘的容量

df可以查看当前系统磁盘空间的使用情况

df -h

性能监控|Linux监控--CPU、内存、I/OLinux监控--CPU、内存、I/O

回到顶部

综合监控工具(含网络)--vmstat

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

root@ubuntu:~# vmstat 2 1

rocs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----

r b swpd free buff cache si so bi bo in cs us sy id wa

1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0

2表示每个两秒采集一次服务器状态,1表示只采集一次。

实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

root@ubuntu:~# vmstat 2  

rocs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----

r b swpd free buff cache si so bi bo in cs us sy id wa

1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0

0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0

0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0

0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0

1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0

字段含义说明:

类别 项目 含义 说明 Procs(进程) r 等待执行的任务数 展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。 B 等待IO的进程数量 Memory(内存) swpd 正在使用虚拟的内存大小,单位k free 空闲内存大小 buff 已用的buff大小,对块设备的读写进行缓冲 Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。

Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。 cache 已用的cache大小,文件系统的cache Cache(片上缓存),这个Cache速度比内存快,从Cache取指令不需要等待。

当CPU要读内存的指令的时候先读Cache再读内存,但一开始Cache是空着的,只能从内存取,这时候的确是很慢,CPU需要等待。

但从内存取回的不仅仅是CPU所需要的指令,还有其它的、当前不需要的指令,然后把这些指令存在Cache里备用。

CPU再取指令的时候还是先读Cache,看看里面有没有所需指令,如果碰巧有就直接从Cache取,不用等待即可返回(命中),这就解放了CPU,提高了效率。(当然不会是100%命中,因为Cache的容量比内存小) inact 非活跃内存大小,即被标明可回收的内存,区别于free和active 具体含义见:概念补充(当使用-a选项时显示) active 活跃的内存大小 具体含义见:概念补充(当使用-a选项时显示) Swap si 每秒从交换区写入内存的大小(单位:kb/s) so 每秒从内存写到交换区的大小 IO bi 每秒读取的块数(读磁盘) 块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytes bo 每秒写入的块数(写磁盘) 块设备每秒发送的块数量,单位是block system in 每秒中断数,包括时钟中断 这两个值越大,会看到由内核消耗的cpu时间sy会越多秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目 cs 每秒上下文切换数 CPU(以百分比表示) us 用户进程执行消耗cpu时间(user time) us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了 sy 系统进程消耗cpu时间(system time) sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足 Id 空闲时间(包括IO等待时间) 一般来说 us+sy+id=100 wa 等待IO时间 wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

回到顶部

超级监控工具--dstat

dstat需要先进行安装

yum install -y dstat

命令:dstat -clmnsygdr

性能监控|Linux监控--CPU、内存、I/OLinux监控--CPU、内存、I/O

发表评论

昵称:

评论内容:

不改了 退出 订阅评论

[Ctrl+Enter快捷键提交]

相关博文:

·

linux操作系统级别监控iostat命令

·

CentOS查看CPU、内存、网络流量和磁盘 I/O【详细】

·

性能测试三十:监控之命令监控

·

CentOS查看CPU、内存、网络流量和磁盘 I/O【详细】

·

CentOS查看CPU、内存、网络流量和磁盘 I/O

»

更多推荐...

上一篇:从压测碰到的诡异断连问题聊聊Nginx的连接管理
下一篇:查看Linux服务器硬件信息