linux监控命令vmstat、iostat、inotifywait
首页 计算机相关 linux命令 linux监控命令vmstat、iostat、inotifywait
vmstat 可以打印出进程,内存,页,块io,磁盘,cpu等使用情况,第一次显示的信息是从开机到现在的平均值,后面则是当前的平均使用情况。-S 后面可以接单位,例如 K/M显示内存
-a inactive - 长时间未访问,如果需要可以立即回收
active - 最近访问过的页面,不能很快被回收
使用 inac/active 来取代 buffer/cache 的内存输出信息
-f 开机到目前为止,系统fork的程序数
-s 将一些事件开机至目前为止,导致的内存变化情况列表说明
-d 列出磁盘的读写总量统计表
-p 后面列出分区,可显示该分区的读写总量统计表#显示一次,开机到现在的平均使用情况
[freecls@izj6cfw9yi1iqoik31tqbgz ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 65564 365148 335876 0 0 5 7 14 17 0 0 100 0 0#2秒1次,显示5次,以内存以MB单位显示
vmstat 2 5 -S M
#两秒显示一次
vmstat 2
字段说明,读者可以参考 linux命令-top 获取相关的额外解释。r 运行队列中进程的数量,长期大于1证明cpu不够
b 等待io的进程数量
swpd 交换的内存数量,大于0但是si,so长期为0
代表之前某段时间内存不足,现在不影响
free 空闲的内存
buff 内存缓冲区
cache 内存缓存
#如果不为0,代表目前内存不足
si swap in 磁盘交换进内存
so swap out 内存交换出磁盘
#磁盘io情况
bi block in 每秒从磁盘读取的块数到内存
bo block out 每秒从内存写入到磁盘的块数
#这两个数越大,代表系统cpu越繁忙
in 每秒中断数,包括时钟中断
cs 每秒上下文切换数
us 用户cpu
sy 内核cpu
id 空闲cpu
wa io等待时间
st Steal Time(与其他虚拟机竞争cpu)
有时候我们在测试的时候在连续的读写文件,但是bi,bo为0,那是因为缓冲区的原因,内核为了性能考虑,当要有数据写入到磁盘的时候,先不写入,等到合适的时机才会写入到磁盘。
从磁盘读取数据也一样,比如我们调用了10次 read() 操作,可能只有1次从磁盘读取到内存的操作,其他9次只是在内存里复制数据,因为内核为了性能考虑,会一次性读取大于所请求的字节数到内存缓存,那么下次连续的读取就可以直接从内存拿。
iostat 也可以用来统计cpu以及输入输出统计,不过在磁盘监控方面功能更加强大,可以细化到特定的磁盘。#证明没安装
-bash: iostat: command not foundyum install sysstat#默认单位为块(block)
-k 单位K
-m 单位M
-p 监控特定磁盘
-c 仅显示 CPU 的状态
-d 仅显示储存设备的状态,不可与 -c 一起用
-t 显示日期出来
-x 详细信息
-N LVM#2秒显示一次
[root@192 ~]# iostat 2
Linux 3.10.0-514.el7.x86_64 (192.168.1.10) 07/06/2018 _x86_64_(2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.09 0.05 0.00 99.84
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.00 0.03 0.00 2647 0
sda 1.01 12.94 215.27 986140 16403137#2s一次,只监控磁盘,单位M
iostat -dm 2
#2s一次,只监控sda磁盘,单位M
iostat -dm -p sda 2#显示详细信息
[root@192 ~]# iostat -dmx 2
Linux 3.10.0-514.el7.x86_64 (192.168.1.10) 07/06/2018 _x86_64_(2 CPU)
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 0.00 0.00 0.00 0.00 0.00 0.00 15.95 0.00 1.69 1.69 0.00 1.39 0.00
sda 0.02 0.38 0.45 0.56 0.01 0.21 450.99 0.03 27.42 4.58 45.78 1.10 0.11
参数解释rrqm/s: 加入到设备队列的每秒merged读请求书。
wrqm/s: 加入到设备队列的每秒merged写请求数。
r/s: merge后,每秒完成的读请求数
w/s: merge后,每秒完成的写请求数
rkB/s: 每秒读数量(单位可以自己指定)。
wkB/s: 每秒写数量(单位可以自己指定)
avgrq-sz: 对设备请求的平均大小(扇区)
avgqu-sz: 对设备请求的平均队列长度
await: 对设备请求的io等待时间(毫秒)
r_await: 对设备读请求的io等待时间(毫秒)
w_await: 对设备写请求的io等待时间(毫秒)
svctm: 对设备的平均服务时间(毫秒)-后期会移除,不太可靠
%util: 对io设备的请求百分比时间流逝。
rrqm/s 和 r/s 以及 wrqm/s 和 w/s是对应的,前者大于后者证明io比较忙碌。
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经接近饱和,该磁盘可能存在瓶颈。
如果 avgqu-sz 比较大,也表示有相当多的io在等待。
inotifywait 命令可以用来监控文件或者目录下的文件变动。#证明没安装
-bash: inotifywait: command not foundyum install inotify-tools-m, --monitor 是要持续监视变化。
-r 使用递归形式监视目录。
-q 减少冗余信息,只打印出需要的信息。
-e 指定要监视的事件列表。
--timefmt 是指定时间的输出格式。
--format 指定文件变化的详细信息。
access 访问,读取文件。
modify 修改,文件内容被修改。
attrib 属性,文件元数据被修改。
move 移动,对文件进行移动操作。
create 创建,生成新文件
open 打开,对文件进行打开操作。
close 关闭,对文件进行关闭操作。
delete 删除,文件被删除。
close_write, close_nowrite, unmount#监视文件
[root@192 ~]# inotifywait -m tmp.txt
Setting up watches.
Watches established.
tmp.txt OPEN
tmp.txt MODIFY
tmp.txt CLOSE_WRITE,CLOSE#递归监视目录下所有文件
inotifywait -mqr /var/log/#递归监控当前目录下 创建文件事件
inotifywait -mr -e create ./