通常情况下,我们最熟悉的查看平均负载的命令可能就是uptime
这个命令了
[root@node3 ~]# uptime
22:33:18 up 174 days, 6:41, 1 user, load average: 0.06, 0.36, 0.65
最后3个值分别是过去1、5、15分钟内的平均负载,那么在生产环境中,当系统负载达到多少的时候需要我们特别注意呢?
个人认为当平均负载持续超过cpu
数量的80%
以上就代表着当前机器已经算全力在工作了,一旦系统负载过高,就会导致程序变慢
,严重的甚至会产生生产事故
。比如说当前8核的系统,系统负载一直维持在7
以上或者更高,这个时候你就该去排查原因了,是因为故障导致需要解决呢,还是说程序本身需要的资源比较多,需要加机器呢。
接下来,我将用几个例子来为你展开当生产环境系统负载过高时,如何排查
在进行分析之前,我需要用到两个工具stress、sysstat,来模拟一下生产环境出现问题的场景
这是一个压测工具,使用它可以很容易的对系统造成各种压力,常用选项如下:
这是一个Linux性能监控的工具集,本文将会使用到其中的两个工具:
你可以使用如下命令下载安装这两个工具
yum install -y epel-release
yum install -y stress
wget https://github.com/sysstat/sysstat/archive/v11.5.5.tar.gz
tar -zxvf v11.5.5.tar.gz
cd sysstat-11.5.5
./configure
make
make install
cp mpstat /usr/bin/
cp pidstat /usr/bin/
这里希望你手里能够有一台2核以上的机器能供测试使用,首先使用uptime命令观察一下当前系统的平均负载,我的系统当前值为0.06, 0.36, 0.65
由CPU使用率过高引起的系统负载升高
我们使用stress占用一个cpu
stress --cpu 1 --timeout 600
持续观察过去一分钟的平均负载,可以发现慢慢的就会上升到1点多
watch -d uptime
接着使用mpstat工具观察一下当前cpu的占用情况
mpstat -P ALL 5
这个命令的意思是每隔5秒更新一次全部cpu的占用信息,下图也说明我们的压测工具已经生效了
接着我们就使用工具来定位出是哪个进程引起的这个系统负载过高
pidstat -u 5 1
这个命令是每5秒输出一组监控数据
由iowait过高引起的系统负载升高
同上个案例,先使用压测工具模拟IO压力
stress -i 1 --timeout 600
使用uptime观察系统负载的变化
watch -d uptime
使用mpstat查看CPU使用率的变化情况
mpstat -P ALL 5
观察结果发现刚才都还是0的iowait已经上升了很多
接着再次使用pidstat定位到具体的进程
pidstat -u 5 1
这次使用stress工具模拟8个进程持续占有CPU
stress -c 8 --timeout 600
然后使用pidstat依然可以轻松的定位到问题所在