Моя первая публикация, к сожалению, из-за проблемы на моем выделенном (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-трафик, я хотел бы услышать ваш совет.