全局监控
针对OS,我通常看上图中红⾊计数器的部分,这是OS查看的 第⼀层。有第⼀层就有第⼆层,所以才需要定向的监控。后⾯我们再说定向监控的思路
CPU监控
-
us cpu
查看⽤⼾态进程消耗的CPU百分⽐。⼤家都知道怎么往下落。这个链就是下⾯这样的
-
wa cpu
查看I/O读写等待消耗的CPU百分⽐。这个证据链怎么往下落呢?来看⼀下
-
sy cpu
查看内核消耗的CPU百分⽐。它的分析链路仍然和us?CPU⾼的分析链路差不多,只是这个进程可能不是应⽤的,⽽是系统⾃⼰的。但是,是什么导致内核进程占⽤CPU⾼呢。这可能和应⽤有关,当然也可能和配置有关。
- si cpu
查看软中断消耗的CPU百分⽐。什么是软中断呢?CPU运行任务时,突然来了⼀个优先级⾼的,这时就会发⼀个中断信号给CPU。CPU这时候就把⼿头的⼯作现场保存⼀下,⼲这个优先级⾼的活,除⾮这个中断是致命的,不然CPU会在⼲完这个活之后再回去⼲之前的活,这就是⼀次软中断。
这个值,越多就越有问题,关键是它有多少才是有问题呢?不幸的是,它根本没有可以参考的值,在不同的应⽤和硬件环境中,si CPU都会有很⼤差别。
IO监控
⼀个数据要想写到磁盘当中,没那么容易,会经历以下过程
-
iostat
svctm代表I/O平均响应时间。请注意,这个计数器,有很多⼈还把它当个宝⼀样,实际上在man⼿册中已
经明确说了,这个数据你爱看就爱,不⼀定准
w_await表⽰写⼊的平均响应时间;
r_await表⽰读取的平均响应时间;
r/s表⽰每秒读取次数;
w/s表⽰每秒写⼊次数
IO/s = r/s + w/s = 18.33+114.33 = 132.66
%util = ( (IO/s * svctm) /1000) * 100% = 100.02564%
这个%util是⽤svctm算来的,既然svctm都不⼀定准了,那这个值也只能参考了 -
iotop
这⾥有Total,也有Actual,并且这两个并不相等,为什么呢?
因为Total的值显⽰的是⽤⼾态进程与内核态进程之间的速度,⽽Actual显⽰的是内核块设备⼦系统与硬件
之间的速度。⽽在I/O交互中,由于存在cache和在内核中会做I/O排序,因此这两个值并不会相同。那如果你要说磁盘的读写能⼒怎么样,我们应该看的是Actual。这个没啥好说的,因为Total再⼤,不能真实写到硬盘上也是没⽤的。
在下⾯的线程列表中,通过排序,就可以知道是哪个线程(注意在第⼀列是TID哦)占的I/O⾼了
内存监控
-
free
total肯定是要优先看的,其次是available,这个值才是系统真正可⽤的内存,⽽不是free
因为Linux通常都会把⽤的内存给cache,但是不⼀定会⽤,所以free肯定会越来越少,但是available
是计算了buff和cache中不⽤的内存的,所以只要available多,就表⽰内存够⽤。
对于内存的分析,你还可以⽤nmon和cat/proc/meminfo看到更多信息。如果你的应⽤是需要⼤⻚处理
的,特别是⼤数据类的应⽤,需要关注下HugePages相关的计数器。
Network监控
先看⽹络的分析决策链
在判断了瓶颈在⽹络上之后,如果知道某个进程的⽹络流量⼤,⾸先肯定是要考虑减少流量,
当然要在保证业务正常运⾏,TPS也不降低的情况下。
当你看到OS全局监控图中的Network中的Total总流量⽐较⼤时,就要有这样的分析思路(从右向左看)