系统无响应,但没有 CPU 负载

系统无响应,但没有 CPU 负载

我的一台服务器完全没有响应:

top - 06:16:53 up  2:14,  1 user,  load average: 30.95, 29.96, 22.92
Tasks: 168 total,   2 running, 166 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 12.6 sy,  0.0 ni,  0.0 id, 86.4 wa,  0.0 hi,  0.0 si,  1.1 st
KiB Mem :  1014524 total,    61368 free,   877028 used,    76128 buff/cache
KiB Swap:        0 total,        0 free,        0 used.     4196 avail Mem 
  scroll coordinates: y = 1/168 (tasks), x = 1/12 (fields)
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                         
   30 root      20   0       0      0      0 S 11.1  0.0   4:04.70 kswapd0                                                                                                                                         
 1116 root      20   0  791548  44900      0 S  0.4  4.4   0:14.91 dockerd                                                                                                                                         
    1 root      20   0   37752   2664    864 D  0.2  0.3   0:06.00 systemd          

很难说清楚到底发生了什么,因为我真的无法获得太多信息(反应迟钝),但这是我所看到的:

  • 平均负载非常高
  • 我看到 CPU 负载大约为 20% - 30%
  • 我没有看到较高的 IO/网络利用率
  • 我无法识别运行队列中有哪些进程

如何实现高平均负载和低 CPU 利用率?

答案1

内存不足,系统处于不稳定状态。没有足够的可用内存来将所有需要的进程页面保存在内存中,因此操作系统必须释放一些页面才能从磁盘加载所需的页面。由于没有交换,要释放的页面无法写入交换空间,因此唯一的选择是丢弃只读代码页或缩小缓冲区缓存。当执行前进到被丢弃的页面时,必须再次将其读入 RAM,这会以牺牲其他页面为代价。在某个时候,问题变得非常严重,以至于大部分时间都花在等待从磁盘加载页面上,并且很少有 CPU 周期可用于有用的工作。

尝试添加一些交换,尽管这可能会或可能不会有帮助,具体取决于您的流程的负载模式。

答案2

可能是挂载点问题。当系统尝试挂载当时不可用的挂载点时,它将开始增加系统负载,尽管您可能不会遇到某些进程囤积 CPU 的情况。

尝试:

  1. 运行mount并查看是否存在一些当时无法到达的挂载点。
  2. 检查/etc/fstab在启动时定义的所有挂载点,查看是否有任何一个挂载点在当时无法到达。

相关内容