背景(虚构)
在某一天上班的时候,收到了一个警告。说是某个机器回复请求很慢。让我们进行故障排除。
故障排除过程
内存/CPU 检查
首先我们肯定是检查内存和CPU。我们可以用top或者ps -aux.
在用top的时候,有几个metrics要说明一下:
VITR:这个指标代表这个process能接触到的所有内存。这里包括文件内存的映射,普通的内存映射,和其他进程共享的内存等等。
RES:这个是真正的进程使用的内存。这个内存总是小于VITR,因为大部分的进程都会有C Library的依赖。
SHR:这个指标代表了再VITR里,有多少内存是可共享的。这里要说明的是,并不是所有的在SHR里面的内存都是在RES里。因为有可能只有很小的一部分被用到(计算在RES里)。
我们在检查top的时候,发现load很高,但是其他的指标都很正常。
在Linux中,load包括两部分,一部分是正在运行或者等待运行的进程,另一部分是在D状态下的进程。
如果我们发现CPU的指标都很正常,但是load依然很高,很有可能就是因为有很多进程在D状态。
IO检查
- 我们可以用iostat来看一下每个设备的状态。比较主要的几个指标包括:tps(transfer per second,每秒有几个请求),kb_read/s, kb_wrtn/s,kb_read,kb_wrtn。如果加上-x选项,我们就可以看到更多的metrics了。其中有几个还是很有用