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


22

这是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

当apache关闭时,kworker和jbd2也关闭。

服务器没有交换,因为我们有大量可用的RAM。我已经看到了与数据库服务器有关的问题,但没有任何事情仅与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                                        ▒

3
您可能想使用perf来找出kworker在做什么,作为故障排除步骤。
David Schwartz

kworker的行为在技术上很有趣,但是我想知道为什么Apache线程向磁盘写入了兆字节。假设可以解释2MB / s的速度,那么对于Web服务器而言,这不是很高吗?然后,可以识别正在写入的文件,例如strace -p(也许是lsof),看看是否显示任何有趣的东西。
sourcejedi 2015年

1
是否有机会交换?
2015年

1
尝试启用sendfileapache以利用零拷贝。
fgbreel

1
@ user2383712这个问题可能与您的云“邻居”有关,您是否可以就此问题与AWS联系,如果不尝试关闭您的AWS实例以更改它的虚拟机管理程序,我过去曾遇到过此问题。
阿林·安德烈

Answers:


5

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

man iotop

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

如果您kworker一直在等待IO,则可能是另一个问题,但我不知道。也许应该在管道上等待。我kworker有时会在服务器上看到相同的内容,但这似乎不是问题。(我第一次看到它也感到恐慌。)


1
这也是在共享环境中,它们都访问相同的存储阵列。这表明磁盘繁忙(VM可能由于有效隔离而可能对此一无所知)。在专用硬件上,它很有可能是发生故障的磁盘,并且需要重试。在网络安装的访问中,这可能意味着链路故障以及NAS /目标端拥塞。
后台处理程序
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.