kworker tiêu thụ + 90% IO và không ghi đĩa


22

đây là một máy chủ web apache tiêu chuẩn trên AWS Linux AMI + EBS. Chúng tôi nhận thấy trung bình tải cao (+8) và iotop -ahiển thị:

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

Khi apache ngừng hoạt động, kworker và jbd2 cũng ngừng hoạt động.

Máy chủ không hoán đổi vì chúng tôi có sẵn nhiều RAM. Tôi đã thấy vấn đề này liên quan đến các máy chủ Cơ sở dữ liệu, nhưng không có gì chỉ tách biệt với Apache.

Bất kỳ ý tưởng về làm thế nào để chẩn đoán điều này hơn nữa và ngăn chặn nó?

CẬP NHẬT 1: báo cáo hoàn hảo (bản ghi hoàn hảo -g -a ngủ 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
Bạn có thể muốn sử dụng perf để tìm hiểu xem kworker đang làm gì như một bước khắc phục sự cố.
David Schwartz

Hành vi của kworker rất thú vị về mặt kỹ thuật, nhưng tôi tự hỏi tại sao các luồng của Apache lại ghi megabyte vào đĩa. Giả sử rằng giải thích 2MB / s, không phải là cao cho máy chủ web? Sau đó, người ta có thể xác định các tệp được viết, ví dụ strace -p(và có thể là lsof) và xem nếu điều đó cho thấy bất cứ điều gì thú vị.
nguồn

1
Là nó trao đổi bởi bất kỳ cơ hội?
Grizly

1
Cố gắng kích hoạt sendfiletrên apache để tận dụng bản sao bằng không.
fgbreel

1
@ user2383712 Vấn đề này có thể liên quan đến "hàng xóm" trên đám mây của bạn, bạn có thể liên hệ với aws về vấn đề này không, nếu không cố gắng tắt máy tính của bạn để thay đổi nó, thì tôi đã gặp vấn đề này trong quá khứ.
Alin Andrei

Câu trả lời:


5

100% IO không có nghĩa là nó sử dụng tất cả các hoạt động IO của bạn. Nó có nghĩa là nó không làm gì ngoài việc chờ đợi trên IO. Do đó,% IO cao với băng thông đĩa thấp / không có thể là bình thường.

man iotop:

[...] Nó cũng hiển thị phần trăm thời gian của luồng / tiến trình được sử dụng trong khi hoán đổi và chờ trong I / O.

Nó có thể là một vấn đề khác nếu bạn kworkerchờ đợi IO mãi mãi, nhưng tôi không biết. Có lẽ nó đang đợi trên một cái ống hoặc cái gì đó. kworkerĐôi khi tôi thấy làm như vậy trên máy chủ của mình và dường như đó không phải là vấn đề. (Tôi cũng hoảng loạn khi lần đầu tiên nhìn thấy nó.)


1
Điều này cũng trong một môi trường chia sẻ, nơi tất cả chúng truy cập vào cùng một mảng lưu trữ. Đây là dấu hiệu của một đĩa bận (trong đó VM có thể không biết gì vì nó được cách ly hiệu quả). Trên phần cứng chuyên dụng, nhiều khả năng nó sẽ là một đĩa bị lỗi với rất nhiều lần thử lại. Trên mạng truy cập gắn kết, nó có thể có nghĩa là một liên kết xấu cũng như tắc nghẽn phía NAS / đích.
đệm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.