kworker 消耗 +90% IO 和零磁盘写入

use*_*712 25 linux io amazon-web-services apache-2.2

这是 AWS Linux AMI + EBS 上的标准 apache Web 服务器。我们注意到高平均负载 (+8) 并iotop -a显示:

Total DISK READ: 0.00 B/s | Total DISK WRITE: 2.37 M/s

  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND             
 3730 be/4 root          0.00 B      0.00 B  0.00 % 91.98 % [kworker/u8:1]
  774 be/3 root          0.00 B   1636.00 K  0.00 % 15.77 % [jbd2/xvda1-8]
 3215 be/4 apache        0.00 B     40.39 M  0.00 %  0.88 % httpd
 3270 be/4 apache        0.00 B     38.20 M  0.00 %  0.93 % httpd
 2770 be/4 apache        0.00 B     46.86 M  0.00 %  0.71 % httpd
Run Code Online (Sandbox Code Playgroud)

当 apache 宕机时,kworker 和 jbd2 也宕机了。

服务器没有交换,因为我们有足够的可用内存。我已经看到这个与数据库服务器相关的问题,但没有任何东西只与 Apache 相关。

关于如何进一步诊断并预防它的任何想法?

更新 1:性能报告(性能记录 -g -a sleep 10)

Samples: 114K of event 'cpu-clock', Event count (approx.): 28728500000
-  83.58%          swapper  [kernel.kallsyms]         [k] xen_hypercall_sched_op                                          ?
   + xen_hypercall_sched_op                                                                                               ?
   + default_idle                                                                                                         ?
   + arch_cpu_idle                                                                                                        ?
   - cpu_startup_entry                                                                                                    ?
        70.16% cpu_bringup_and_idle                                                                                       ?
      - 29.84% rest_init                                                                                                  ?
           start_kernel                                                                                                   ?
           x86_64_start_reservations                                                                                      ?
           xen_start_kernel                                                                                               ?
+   1.73%            httpd  [kernel.kallsyms]         [k] __d_lookup_rcu                                                  ?
+   1.08%            httpd  [kernel.kallsyms]         [k] xen_hypercall_xen_version                                       ?
+   0.38%            httpd  [vdso]                    [.] 0x0000000000000d7c                                              ?
+   0.36%            httpd  libphp5.so                [.] zend_hash_find                                                  ?
+   0.33%            httpd  libphp5.so                [.] _zend_hash_add_or_update                                        ?
+   0.25%            httpd  libc-2.17.so              [.] __memcpy_ssse3                                                  ?
+   0.24%            httpd  libphp5.so                [.] _zval_ptr_dtor                                                  ?
+   0.24%            httpd  [kernel.kallsyms]         [k] __audit_syscall_entry                                           ?
+   0.22%            httpd  [kernel.kallsyms]         [k] pvclock_clocksource_read                                        ?
Run Code Online (Sandbox Code Playgroud)

sud*_*udo 6

100% IO 并不意味着它正在使用您所有的 IO 操作。这意味着它除了等待 IO 之外什么都不做。因此,具有低/零磁盘带宽的高 %IO 可能是正常的。

man iotop

[...] 它还显示线程/进程在换入和等待 I/O 时花费的时间百分比。

如果您kworker永远等待 IO,这可能是一个不同的问题,但我不知道。也许它应该在等待管道或其他东西。我看到kworker有时在我的服务器上做同样的事情,这似乎不是问题。(我第一次看到也惊慌了。)

  • 这也是在共享环境中,他们都访问相同的存储阵列。这是一个繁忙的磁盘的标志(虚拟机可能不知道任何关于它的信息,因为它被有效地隔离了)。在专用硬件上,它更有可能是经过大量重试的失败磁盘。在网络安装访问中,这可能意味着链接不良以及 NAS/目标端拥塞。 (2认同)