如何查找服务器负载过高的原因
我叫伊藤,是一名基础设施工程师。
上次,我介绍了一种称为“平均负载”的内容,当服务器负载增加时会检查该内容。
通过平均负载检查服务器负载?
平均负载是等待处理的进程的表示。
数字越高,等待处理的进程就越多,情况就是“负载较高”。
为什么这次负载这么高?我想找出原因。
主要有两个原因
平均负载较高的主要原因有两个。
- CPU处理跟不上
- 磁盘 I/O 处理跟不上
现在,我想解释一下如何找出每一个原因。
如果是CPU原因
首先,使用top命令检查CPU使用率。下面两个值值得注意。
%用户 | 用户进程使用的CPU使用率 |
%系统 | 系统(内核)使用的CPU使用率 |
如果一般进程是 CPU 密集型的,则用户模式 (%user) CPU 使用率可能会很高。
另外,如果大量进程在用户态下运行,进程也会发生切换。
由于进行这种“进程切换”时使用的是内核态(%system)CPU,
对于经常切换进程的程序来说,内核态CPU使用率会很高。
如果用户态CPU使用率很高
如果内核CPU使用率很高
如果磁盘 I/O 是原因
如果磁盘 I/O 是原因,请检查顶部的以下内容。
%io等待 | 当需要磁盘 I/O 时进程处于空闲状态 |
交换 | 已用内存量以及使用 HDD 代替内存 |
当从磁盘读取和写入大量数据时,iowait 值通常很高。
例如,访问大量数据库的数据库服务器往往具有较高的 iowait 值。
SWAP是当进程使用所有内存时使用HDD代替内存的容量。
使用 SWAP 的一个示例是当 Web 服务器接收大量访问时,分配内存并使用 SWAP。
使用SWAP时,使用HDD代替内存=由于磁盘I/O而增加负载,从而降低服务器速度。
如果由于磁盘 I/O 导致 iowait 较高且负载较高
如果您使用的是交换
我会调查
我认为这将帮助您确定问题是由 CPU 还是 I/O 引起的。
此外,我们将使用 ps 命令来找出哪些进程正在使用 CPU(在 SWAP 的情况下,哪些进程正在使用内存)。
如果用户态CPU使用率较高,I/O等没有问题,
那么可能需要提高CPU性能或者审查程序。
则可能需要扩展内存或
此外,可能存在平均负载较低但处理速度较慢的情况。
在这种情况下,可能是软件设置或网络处理出现问题。
当面对“高负载”的问题时,
解决问题的第一步就是冷静下来,找出负载到底放在哪里。