kworker потребляет + 90% ввода-вывода и нулевую запись на диск

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 также не работают.

Сервер не обменивается, так как у нас достаточно оперативной памяти. Я видел эту проблему, связанную с серверами баз данных, но ничего не изолированно только с Apache.

Любая идея о том, как диагностировать это дальше и предотвратить это?

ОБНОВЛЕНИЕ 1: отчет о перфекте (перф запись -g -a сон 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                                        ▒
user2383712
источник
3
Возможно, вы захотите использовать perf, чтобы узнать, что делает kworker в качестве шага устранения неполадок.
Дэвид Шварц
Поведение kworker технически интересно, но мне интересно, почему потоки Apache записывают мегабайты на диск. Предполагая, что это объясняет 2 МБ / с, разве это не так много для веб-сервера? Затем можно было бы идентифицировать записываемые файлы, например strace -p(и, может быть, lsof) и посмотреть, показывает ли это что-нибудь интересное.
sourcejedi
1
Это обмен случайно?
Grizly
1
Попробуйте включить sendfileна apache, чтобы воспользоваться нулевой копией.
fgbreel
1
@ user2383712 Эта проблема может быть связана с вашим «соседом» по облаку. Вы можете связаться с aws по поводу этой проблемы, если не пытаетесь завершить работу экземпляра aws, чтобы изменить его гипервизор, у меня была эта проблема в прошлом.
Алин Андрей

Ответы:

5

100% ввода-вывода не означает, что он использует все ваши операции ввода-вывода. Это означает, что он ничего не делает, кроме ожидания ввода-вывода. Поэтому высокий% IO с низкой / нулевой пропускной способностью диска может быть нормальным.

man iotop:

[...] Он также отображает процент времени, потраченного потоком / процессом на подкачку и ожидание ввода-вывода.

Это может быть другой проблемой, если вы kworkerждете IO вечно, но я не знаю. Может быть, он должен ждать на трубе или что-то. Я kworkerиногда делаю то же самое на моем сервере, и это не проблема. (Я также запаниковал, когда впервые увидел это.)

Судо
источник
1
Это также в общей среде, где все они имеют доступ к одним и тем же массивам хранения. Это признак занятого диска (о котором виртуальная машина может ничего не знать, потому что он эффективно изолирован). На выделенном оборудовании это будет более вероятный сбойный диск с большим количеством повторных попыток. При доступе через сеть это может означать плохую связь, а также перегрузку на стороне NAS / целевой стороны.
Спулер