![平均负载高但 CPU 使用率低 - 如何在不重启的情况下降低负载?](https://linux22.com/image/923224/%E5%B9%B3%E5%9D%87%E8%B4%9F%E8%BD%BD%E9%AB%98%E4%BD%86%20CPU%20%E4%BD%BF%E7%94%A8%E7%8E%87%E4%BD%8E%20-%20%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E9%87%8D%E5%90%AF%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E9%99%8D%E4%BD%8E%E8%B4%9F%E8%BD%BD%EF%BC%9F.png)
我为我的实验室维护了十几台 xubuntu (16.04.6) linux 服务器。它们都通过 nfs/autofs/ldap 服务互连,形成一个分布式集群。它一直运行良好,但两天前,提供 ldap+home dir nfs 服务的中央服务器宕机了。无需亲自去手动重启机器,我设法使用维护帐户登录每台机器,并将 ldap/nfs 挂载切换到备份服务器。大多数服务器无需重启即可恢复运行。我通过 强制卸载了挂载的 nfs 挂载(包括用户主目录)umount -f -l /mount/point
。
但是,我注意到,由于之前的 nfs 挂载消失了,导致一些进程处于睡眠/停止状态。当我登录这些计算机时,我注意到平均负载数字异常高,在输入 top 时范围在 20-100 之间,例如:
top - 18:30:46 up 50 days, 23:35, 10 users, load average: 17.59, 17.85, 23.97
Tasks: 494 total, 1 running, 396 sleeping, 0 stopped, 19 zombie
%Cpu(s): 3.0 us, 0.5 sy, 0.4 ni, 95.1 id, 1.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 16382324 total, 1159748 free, 7052016 used, 8170560 buff/cache
KiB Swap: 8458236 total, 7108860 free, 1349376 used. 8296156 avail Mem
从上面的输出中,可以看到平均负载很高,但 CPU 大部分时间处于空闲状态。有 19 个僵尸程序,90% 的进程处于休眠状态。
另一个看起来像这样
top - 18:56:40 up 18 days, 57 min, 9 users, load average: 25.23, 25.16, 28.13
Tasks: 494 total, 1 running, 377 sleeping, 0 stopped, 40 zombie
%Cpu(s): 1.5 us, 0.4 sy, 0.0 ni, 49.0 id, 49.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 32612980 total, 2231320 free, 10522468 used, 19859192 buff/cache
KiB Swap: 8458236 total, 8451836 free, 6400 used. 19531452 avail Mem
其中一台机器的平均负载一夜之间从 40 多增加到今天早上的 130 多。我发现这是由于一些 cron 作业造成的。
我试图杀死僵尸,但没有成功。我看到这个帖子并成功杀死了一些“D”(不间断睡眠)状态进程,使负载降至 20-30 左右,但仍然看起来相当高。
我想知道我是否可以采取一些措施来关闭这些死机/僵尸/停止程序。我不想重新启动,因为这可能会有无法恢复的风险,尤其是对于我刚刚切换到的备用 ldap/nfs 服务器。尽管平均负载很高,但这些机器使用起来很顺畅。CPU 使用率很低,CPU 温度也很低。我希望将负载恢复到正常水平,通常为 1 或低于 1。不重新启动可以实现吗?