kworker ใช้ + 90% IO และเขียนดิสก์เป็นศูนย์


22

นี่เป็นเว็บเซิร์ฟเวอร์ apache มาตรฐานบน AWS Linux AMI + EBS เราสังเกตเห็นว่าภาระเฉลี่ยสูง (+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

มีความคิดเกี่ยวกับวิธีการวินิจฉัยเพิ่มเติมและป้องกันหรือไม่

UPDATE 1: รายงาน perf (บันทึก perf -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

พฤติกรรมของคนทำงานที่น่าสนใจทางเทคนิค แต่ฉันสงสัยว่าทำไม Apache Apache จึงเขียนเมกะไบต์ลงบนดิสก์ สมมติว่าอธิบาย 2MB / s นั้นไม่สูงสำหรับเว็บเซิร์ฟเวอร์หรือไม่ จากนั้นหนึ่งสามารถระบุไฟล์ที่กำลังเขียนเช่นstrace -p(และอาจจะ lsof) และดูว่าสิ่งที่แสดงให้เห็นว่าน่าสนใจ
sourcejedi

1
มีการแลกเปลี่ยนโดยบังเอิญหรือไม่?
Grizly

1
ลองเปิดใช้งานsendfileบน apache เพื่อใช้ประโยชน์จากศูนย์สำเนา
fgbreel

1
@ user2383712 ปัญหานี้อาจเกี่ยวข้องกับ "เพื่อนบ้าน" บนคลาวด์ของคุณคุณสามารถติดต่อ aws เกี่ยวกับปัญหานี้ได้หากไม่พยายามปิดคุณ aws อินสแตนซ์เพื่อเปลี่ยนเป็นไฮเปอร์ไวเซอร์ฉันมีปัญหานี้ในอดีต
Alin Andrei

คำตอบ:


5

100% IO ไม่ได้หมายความว่าใช้การปฏิบัติการ IO ทั้งหมดของคุณ มันหมายถึงไม่ทำอะไรเลยนอกจากรอคอย IO ดังนั้น% IO สูงพร้อมแบนด์วิธดิสก์ต่ำ / ศูนย์จึงเป็นเรื่องปกติ

man iotop:

[... ] นอกจากนี้ยังแสดงเปอร์เซ็นต์ของเวลาที่เธรด / กระบวนการที่ใช้ในขณะที่แลกเปลี่ยนและในขณะที่รอ I / O

มันอาจเป็นปัญหาที่แตกต่างกันถ้าคุณkworkerรอคอย IO ตลอดไป แต่ฉันไม่รู้ บางทีมันน่าจะรออยู่ที่ท่อหรืออะไรซักอย่าง ฉันเห็นว่าkworkerการทำเช่นเดียวกันบนเซิร์ฟเวอร์ของฉันในบางครั้งและดูเหมือนจะไม่เป็นปัญหา (ฉันตื่นตระหนกในครั้งแรกที่เห็น)


1
นี่คือในสภาพแวดล้อมที่ใช้ร่วมกันที่พวกเขาทั้งหมดเข้าถึงอาร์เรย์จัดเก็บข้อมูลเดียวกัน นี่เป็นสัญญาณของดิสก์ที่ไม่ว่าง (ซึ่ง VM อาจไม่รู้อะไรเกี่ยวกับเพราะมันแยกได้อย่างมีประสิทธิภาพ) สำหรับฮาร์ดแวร์เฉพาะมันมีแนวโน้มที่จะเป็นดิสก์ที่ล้มเหลวที่มีการลองใหม่จำนวนมาก ในการเข้าถึงเครือข่ายก็อาจหมายถึงลิงค์ที่ไม่ดีเช่นเดียวกับความแออัดด้าน NAS / เป้าหมาย
Spooler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.