Frage kworker verbraucht + 90% IO und Null-Disk-Schreibzugriff


Dies ist ein Standard-Apache-Webserver auf AWS Linux AMI + EBS. Wir bemerken hohe Auslastung durchschnittlich (+8) und iotop -a zeigt an:

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

Wenn apache heruntergefahren ist, ist kworker und jbd2 ebenfalls inaktiv.

Der Server tauscht nicht aus, da wir genügend RAM zur Verfügung haben. Ich habe gesehen, dass dieses Problem mit Datenbankservern zusammenhängt, aber nichts isoliert auf Apache.

Irgendeine Idee, wie man das weiter diagnostizieren und verhindern kann?

UPDATE 1: Perf-Bericht (Perf-Record -g -a Schlaf 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                                        ▒

20
2018-01-13 16:05


Ursprung


Du möchtest vielleicht Verwenden Sie perf, um herauszufinden, was kworker macht als ein Fehlerbehebungsschritt. - David Schwartz
Das Verhalten von Kworker ist technisch interessant, aber ich frage mich, warum Apache-Threads Megabyte auf die Festplatte schreiben. Angenommen, das erklärt die 2MB / s, ist das nicht so hoch für einen Webserver? Dann könnte man die zu schreibenden Dateien identifizieren, z. strace -p (und vielleicht lsof) und sehen, ob das etwas interessantes zeigt. - sourcejedi
Tauscht es zufällig? - Grizly
Versuchen Sie zu aktivieren sendfile auf Apache, um die Nullkopie zu nutzen. - fgbreel
@ user2383712 Dieses Problem kann mit Ihrem Cloud- "Nachbarn" zusammenhängen. Wenden Sie sich an aws, wenn Sie nicht versuchen, die aws-Instanz herunterzufahren, um den Hypervisor zu ändern. In der Vergangenheit hatte ich dieses Problem. - Alin Andrei


Antworten:


100% IO bedeutet nicht, dass es alle IO-Operationen verwendet. Es bedeutet, dass es nichts anderes tut, als auf IO zu warten. Daher können hohe% IO mit niedriger / Null-Festplattenbandbreite normal sein.

man iotop:

[...] Es zeigt auch den Prozentsatz von          Zeit, die der Thread / Prozess beim Einlagern und Warten auf E / A verbraucht hat.

Es kann ein anderes Problem sein, wenn Sie kworker wartet ewig auf IO, aber ich weiß es nicht. Vielleicht sollte es auf einer Pfeife oder etwas warten. Aha kworker Manchmal mache ich dasselbe auf meinem Server und es scheint kein Problem zu sein. (Ich war auch in Panik, als ich es das erste Mal sah.)


5
2018-06-21 21:49



Dies geschieht auch in einer gemeinsamen Umgebung, in der alle auf dieselben Speicher-Arrays zugreifen. Dies ist ein Zeichen für eine ausgelastete Festplatte (von der die VM möglicherweise nichts weiß, weil sie effektiv isoliert ist). Auf dedizierter Hardware wäre es wahrscheinlicher, eine fehlerhafte Festplatte mit vielen Wiederholungen zu sein. Bei Netzwerkzugriff kann dies sowohl eine schlechte Verbindung als auch NAS- / Zielseitenüberlastung bedeuten. - Spooler