Назад | Перейти на главную страницу

httpd обрабатывает скачок ЦП до 100% + каждые x секунд

Моя первая публикация, к сожалению, из-за проблемы на моем выделенном (Linux Centos 6) сервере, на котором работает несколько личных и один коммерческий веб-сайт.

Server version: Apache/2.4.18 (Unix)
Server built:   Mar  7 2016 20:22:35
Cpanel::Easy::Apache v3.32.10 rev9999

root@server213-171-196-40 [~]# free
             total       used       free     shared    buffers     cached
Mem:      16212880   15939912     272968    1939060      65928   13730952
-/+ buffers/cache:    2143032   14069848
Swap:      4194296    1477616    2716680

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
[b] 2900 nobody    20   0 90636  14m 2408 R 99.1  0.1   0:07.42 httpd[/b]
   72 root      20   0     0    0    0 R 17.3  0.0   8:08.35 kswapd0
  436 root      20   0     0    0    0 S  2.3  0.0   1:54.42 md1_raid1
    1 root      20   0 19356  668  452 S  0.0  0.0   0:00.72 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.03 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.37 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.05 watchdog/0
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.04 migration/1

Выше показан пример сверху, когда процесс httpd «ломается». Очевидно, это увеличивает нагрузку на сервер, и когда 4 процесса httpd делают то же самое, веб-сайты перестают отвечать, как вы можете себе представить. обычно процессы httpd выполняются с диапазоном 0,1% 0,5%, что приятно.

Скачки загрузки процессора начались только рано утром в понедельник, и я не перестраивал apache / не менял конфигурацию в воскресенье.

У меня довольно много сайтов на wordpress - я дважды проверил и вижу какие-либо обновления плагинов в то время.

Мои навыки работы с Linux немного ограничены, я выбрал PID для одного из максимальных процессов httpd и попытался отследить, что он делал, с помощью команды strace -p

показывал эту прокрутку с высокой скоростью ... моему неподготовленному глазу выглядит как DOS-атака? флудить сервер?

1457649966.654499 read(114, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 <0.000005>
1457649966.654515 read(114, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 <0.000005>
1457649966.654531 read(114, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 <0.000005>
1457649966.654545 read(114, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 <0.000006>
1457649966.654559 read(114, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 <0.000005>
1457649966.654573 read(114, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 <0.000005>
1457649966.654587 read(114, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 <0.000005>

Я, очевидно, мог ошибаться - за 10 или около того секунд скачка мой вывод журнала составил более 2 миллионов строк! так что фантастическое количество коротких "прочтений".

Еще один след беглого процесса:

root@server213-171-196-40 [/usr/local/iftop-0.17]# strace -c -p 23369
Process 23369 attached
^CProcess 23369 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.044961           0   2367035           read
------ ----------- ----------- --------- --------- ----------------
100.00    0.044961               2367035           total

Я на самом деле не понимаю, что там происходит - я предполагаю, что что-то каким-то образом выталкивает огромное количество шума / пустых данных в мои процессы httpd, и делает это каждые 20 секунд / каждые пару минут.

Или это что-то совсем другое, и я не в порядке.

Я пытаюсь поместить некоторые из моих сайтов в облачную среду, чтобы: а) ускорить работу сайтов с интенсивной графикой, используя их CDN, а также попытаться добавить дополнительный уровень защиты. пока ничего не сделал. Я даже не могу понять, какой URL / веб-сайт является причиной, если таковая имеется.

На сервере есть mod_security со стандартным набором правил - я отключил проверку ip, так как где-то прочитал, это может замедлить обслуживание (хотя никакого эффекта). На сервере много памяти (16 гигабайт), 4 процессора (8-ядерная машина Intel) и процессы apache, которые показывают крошечное использование памяти, это все процессор.

PHP версии 5.6.18 (или .19, необходимо перепроверить).

Netstat во время `` всплеска '' не показывает ни одного IP-адреса, имеющего более 20 подключений, и сервер не перегружен (я отключил свой загруженный веб-сайт, который принимал более 15000 посетителей в день, чтобы удалить трафик как причину ).

root@server213-171-196-40 [~]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

      1 108.162.221.138
      1 108.162.246.252
      1 141.101.98.176
      1 173.245.50.109
      1 199.16.156.125
      1 213.128.67.90
      1 213.205.194.66
      1 222.186.34.163
      1 79.70.61.9
      1 86.128.207.3
      1 94.14.114.56
      1 95.151.139.42
      1 Address
      1 servers)
      2 108.162.222.88
      2 173.245.56.127
      4 86.4.247.37
      5 136.243.48.85
      6 78.147.41.131
      7 90.220.251.88

Сервер работал нормально до утра понедельника - под большей нагрузкой, чем сейчас.

Из httpd.conf:

Timeout 300
TraceEnable Off
ServerSignature Off
ServerTokens ProductOnly
FileETag All
StartServers 5
<IfModule prefork.c>
MinSpareServers 5
MaxSpareServers 10
</IfModule>
ServerLimit 256
MaxRequestWorkers 150
MaxConnectionsPerChild 15000
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

Текущий с использованием prefork mpm, но я успешно использовал событие mpm, я перестроил apache в соответствии со `` стандартной '' настройкой предварительной вилки в соответствии с WHM / CPANAL easyapache3, чтобы увидеть, будет ли работать перестройка и изменение конфигурации для apache , это не так.

Если кто-то из вас видел аналогичный вывод трассировки или такой же HTTP-трафик, я хотел бы услышать ваш совет.