kworker mengkonsumsi + 90% IO dan zero disk write

22

ini adalah server web apache standar pada AWS Linux AMI + EBS. Kami memperhatikan rata-rata muatan tinggi (+8) dan iotop -amenunjukkan:

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

Ketika apache turun, kworker dan jbd2 juga turun.

Server tidak bertukar karena kami memiliki banyak RAM yang tersedia. Saya telah melihat masalah ini terkait dengan server Database, tetapi tidak ada yang hanya diisolasi ke Apache.

Adakah cara untuk mendiagnosis ini lebih lanjut dan mencegahnya?

UPDATE 1: laporan perf (catatan perf -g -a tidur 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                                        ▒
pengguna2383712
sumber
3
Anda mungkin ingin menggunakan perf untuk mengetahui apa yang dikerjakan kworker sebagai langkah pemecahan masalah.
David Schwartz
perilaku kworker secara teknis menarik, tapi saya heran mengapa utas Apache menulis megabyte ke disk. Dengan asumsi itu menjelaskan 2MB / s, bukankah itu setinggi untuk server web? Kemudian orang dapat mengidentifikasi file yang sedang ditulis, misalnya strace -p(dan mungkin lsof) dan melihat apakah itu menunjukkan sesuatu yang menarik.
sourcejedi
1
Apakah itu bertukar kebetulan?
Grizly
1
Coba aktifkan sendfilepada apache untuk memanfaatkan nol salinan.
fgbreel
1
@ user2383712 Masalah ini mungkin berhubungan dengan "tetangga" cloud Anda, dapatkah Anda menghubungi aws tentang masalah ini, jika tidak mencoba mematikan Anda, misalnya untuk mengubah hypervisornya, saya pernah mengalami masalah ini sebelumnya.
Alin Andrei

Jawaban:

5

100% IO tidak berarti menggunakan semua operasi IO Anda. Itu berarti tidak melakukan apa-apa selain menunggu di IO. Oleh karena itu, IO% tinggi dengan bandwidth disk rendah / nol dapat menjadi normal.

man iotop:

[...] Ini juga menampilkan persentase waktu yang dihabiskan oleh thread / proses saat bertukar dan saat menunggu pada I / O.

Ini mungkin masalah yang berbeda jika Anda kworkermenunggu di IO selamanya, tapi saya tidak tahu. Mungkin itu seharusnya menunggu di pipa atau sesuatu. Saya melihat kworkermelakukan hal yang sama di server saya kadang-kadang, dan sepertinya tidak menjadi masalah. (Saya juga panik saat pertama kali melihatnya.)

sudo
sumber
1
Ini juga berada dalam lingkungan bersama, di mana mereka semua mengakses array penyimpanan yang sama. Ini adalah tanda dari disk yang sibuk (di mana VM mungkin tidak tahu apa-apa karena itu terisolasi secara efektif) Pada perangkat keras khusus, itu akan lebih cenderung menjadi disk gagal dengan banyak coba lagi. Pada akses yang dipasang di jaringan, ini dapat berarti tautan buruk serta NAS / target kemacetan sisi.
Pengumpul informasi