kworker 消耗 90% 以上的 IO 且零磁盘写入

kworker 消耗 90% 以上的 IO 且零磁盘写入

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

答案1

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

man iotop

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

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

答案2

遇到驱动器每 5 秒写入一次的问题,我使用了下面的命令,发现 x2goserver 每 5 秒持续运行一次并触发 kworker。请注意,如果驱动器打开,Google Chrome 会写入驱动器。

sudo apt 删除 x2goserver

sudo pidstat -dvl 5

04:52:35 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

04:52:40 PM     0      2318    539.42      0.01      0.00       0  /usr/bin/perl /usr/sbin/x2gocleansessions
04:52:40 PM     0   1920632      0.00    251.20      0.00       0  kworker/u64:3-events_unbound



04:52:40 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
04:52:45 PM     0      2318    809.12      0.01      0.00       0  /usr/bin/perl /usr/sbin/x2gocleansessions



04:52:45 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
04:52:50 PM     0      2318    539.42      0.01      0.00       0  /usr/bin/perl /usr/sbin/x2gocleansessions

相关内容