最近的两周业务上线,忙着搞系统的稳定性。最近忙完了,记录一下最近学习的一些内容,本篇主要介绍linux监控相关的
为了能够快速的定位问题,在每台机器上增加了一些定期执行的脚本,用于采集机器的状态,分别是:top,iostat,iotop,ioping,vmstat,dstat,sar
一个一个看吧
top
top -d3 -b -c -w1024
top指令非常简单了,主要定期dump一次,简单看看cpu利用率是否正常,wait和sys状态是否过高,另外用看看对应的内存信息
iostat
iostat -t -x -m 1
也是比较常用的指令,一般会展示如下的一些数据
rrqm/s | wrqm/s | r/s | w/s | rMB/s | wMB/s | avgrq-sz | avgqu-sz | await | r_await | w_await | svctm | %util |
---|
读请求数 | 写请求数 | 完成的读请求 | 完成的写请求 | 读数据量 | 写数据量 | 平均读大小 | 平均写大小 | 平均处理一个请求的时间 | | | | |
目前也没有通过这个指标定位到问题的经验,一般就看看读写数据量是否是正常的,是否有突然非常大量的读取和写入。
iotop
iotop -d 2 -o -P -t
这个指令会显示有io的进程,展示每个进程对应的读写数据量和swapin率,目前没用过这个值,根据man手册解释,这个应该是进城等待内存换入所花的时间百分比,应该只有swap区打开的情况下这个值才可能是非0?
ioping
ioping -S 10485760 -y -k -W -L -s 4k
该指令会定期写入4k数据块到磁盘,测试磁盘的延迟,某些时候server层请求出现毛刺,排查后发现磁盘在那个时间点延迟升高,可能就是磁盘抖动导致的延迟毛刺,如果不是非常有必要的情况下,排查到磁盘的抖动就可以结束了。
vmstat
vmstat -t -w 1
该指令能够看到一些内存page信息,free buffer cache的page数量,以及block读入和写出的一些数量
sar
sar -B 1
pgpgin/s | pgpgout/s | fault/s | majflt/s | pgfree/s | pgscank/s | pgscand/s | pgsteal/s |
---|
这个接触得少一点,简单记录一下
- fault/s。是page fault的次数,包括minor和major,按照man来开,major指的应该是需要从disk读数据的
- majflt/s。major page fault次数
- pgfree/s。归还给空闲链表的page数量,看起来这个应该是指的用户进程归还的,即从used 到 free里的?
- pgscank/s。扫描到可回收的内存页,内核会起一个线程不停的扫描,找到可回收的内存页进行回收,所以这个scan无所谓,定期执行,在内存水位低于一定情况时就会触发(应该是低于min free byte*一个系数)
- pgscand/s。扫描到可回收的内存页,这个是强制回收,当内存低于minfreebytes的时候触发,会卡住进程,如果这一列非零需要注意
- pgsteal/s。从cache中回收的page数量,基本和两个scan之和是一致的。
pgsteal和pgfree的区别,steal是回收目前正在被使用的内存,从active和inactive中回收,如果是page cache,那么可以直接回收(脏页就写了后回收,非脏页直接回收),如果是从匿名区回收,那么就需要将用户正在使用的内存页唤出到swap,极度影响性能,建议优先回收page cache,内核有参数可以设置该策略。
proc meminfo
这个内容就特别多了,可以参考meminfo 详解
我主要关注几个点
- cache和buffer的区别,从man手册看,buffer是对于块设备的缓冲区,cache是文件系统的缓存,即理论上来说数据从磁盘读出来,缓存到buffer,然后整理后交给文件系统,文件系统的cache又会缓存一次,这个每意义,所以目前文件系统的cache和buffer是同一个东西。对于我们这种使用文件系统的应用来说,buffer和cache没区别
- active和inactive链表都是在使用中的内存,上述说的scan回收page也是在链表上回收,对于匿名区和page cache回收策略不一样,会优先从inactive链表上回收(我也不知道能不能从active上回收)
|