Проблемы с серверами Apache и много процессов httpd

Вопрос:

У нас есть проблема с нашим сервером Apache. Это очень медленно, и использование процессора действительно велико (иногда показывается постоянная 100%).

Это на системе ubuntu.

Любые идеи, что может быть причиной этого?

“top” показывает это (возможно, еще больше процессов httpd, которые не вписывались в окно терминала):

top - 11:33:19 up  1:07,  2 users,  load average: 37.79, 35.90, 29.14
Tasks:  86 total,  10 running,  76 sleeping,   0 stopped,   0 zombieCpu(s): 90.6%us,  9.4%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    786432k total,   379584k used,   406848k free,        0k buffersSwap:        0k total,        0k used,        0k free,        0k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
5507 nobody    16   0 54540  19m 5204 S    4  2.6   0:03.70 httpd                          5653 nobody    17   0 59996  24m 4808 R    4  3.2   0:01.98 httpd
3277 nobody    15   0  201m  51m 6724 R    2  6.7   2:14.30 mysqld                         5260 nobody    15   0 53740  18m 4972 S    2  2.4   0:06.53 httpd
5333 nobody    15   0 54536  19m 5152 S    2  2.5   0:06.50 httpd                          3923 nobody    15   0 52644  18m 6372 S    1  2.4   0:16.80 httpd
5519 nobody    15   0 51252  15m 4792 S    1  2.0   0:03.02 httpd                          4048 nobody    15   0 52808  17m 5040 R    1  2.3   0:13.86 httpd
5240 nobody    15   0 53980  18m 4916 S    1  2.4   0:08.42 httpd
5249 nobody    15   0 52908  17m 5188 S    1  2.3   0:08.23 httpd                          5385 nobody    15   0 52568  16m 4824 S    1  2.2   0:04.19 httpd
5395 nobody    16   0 52536  16m 4804 S    1  2.1   0:03.90 httpd                          5422 nobody    16   0 51408  15m 4888 S    1  2.1   0:03.49 httpd
5503 nobody    15   0 52536  16m 4800 S    1  2.1   0:02.67 httpd                          3646 nobody    15   0 52572  16m 5012 S    1  2.2   0:25.42 httpd
3948 nobody    15   0 52844  17m 5008 R    1  2.3   0:17.15 httpd                          5283 nobody    15   0 54000  18m 4944 S    1  2.4   0:07.05 httpd
5300 nobody    15   0 54748  19m 5276 S    1  2.6   0:06.20 httpd                          5304 nobody    15   0 52876  17m 4904 S    1  2.2   0:06.45 httpd
5305 nobody    15   0 52812  17m 4884 S    1  2.2   0:06.02 httpd                          5400 nobody    16   0 52060  16m 4800 R    1  2.1   0:04.10 httpd
5423 nobody    15   0 54764  19m 5196 S    1  2.6   0:04.37 httpd                          5433 nobody    15   0 52168  16m 4844 R    1  2.1   0:03.38 httpd
5497 nobody    15   0 52572  16m 4820 S    1  2.2   0:02.83 httpd                          5498 nobody    15   0 53076  17m 4864 S    1  2.3   0:03.14 httpd
5502 nobody    15   0 51260  15m 4804 S    1  2.0   0:02.70 httpd                          5505 nobody    15   0 54920  19m 4976 S    1  2.5   0:02.68 httpd
5546 nobody    15   0 52584  16m 4664 S    1  2.2   0:02.48 httpd                          5550 nobody    15   0 51244  15m 4796 S    1  2.0   0:02.42 httpd
5652 nobody    15   0 51976  17m 5912 S    1  2.3   0:01.24 httpd                          5659 nobody    15   0 55012  19m 4980 S    1  2.6   0:01.25 httpd
5707 nobody    15   0 51416  15m 4880 S    1  2.1   0:00.09 httpd                          5710 nobody    15   0 51240  15m 4792 S    1  2.0   0:00.14 httpd
5399 nobody    15   0 52568  16m 4856 S    1  2.2   0:03.86 httpd                          5435 nobody    15   0 52596  16m 4864 S    1  2.2   0:02.96 httpd
5467 nobody    15   0 52316  16m 4856 R    1  2.1   0:02.93 httpd                          5501 nobody    15   0 52956  17m 4844 S    1  2.2   0:02.79 httpd
5525 nobody    15   0 54508  19m 4916 S    1  2.5   0:03.41 httpd                          5547 nobody    15   0 52604  18m 5708 S    1  2.3   0:02.77 httpd
5590 root      15   0 19208 1360 1044 R    1  0.2   0:00.39 top                            5627 nobody    15   0 55648  20m 5164 S    1  2.6   0:02.56 httpd
5629 nobody    15   0 51248  15m 4792 S    1  2.0   0:01.62 httpd                          5647 nobody    15   0 52956  17m 4884 S    1  2.2   0:01.16 httpd
5656 nobody    15   0 52588  17m 4884 S    1  2.2   0:00.94 httpd                          5665 nobody    15   0 51244  15m 4792 S    1  2.0   0:01.36 httpd
5709 nobody    15   0 51928  15m 4628 S    1  2.1   0:00.02 httpd                          5711 nobody    16   0 51148  15m 4600 S    1  2.0   0:00.02 httpd

Лучший ответ:

Apache должен разветвлять процесс обработки каждого подключенного клиента. Подробнее об этом здесь.

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

  • Оптимизируйте ваше приложение: профилируйте свой код приложения и попробуйте оптимизировать области, которые больше всего загружают сервер.
  • Рассмотрите возможность перехода на веб-сервер с более низким воздействием, например nginx. Это может увеличить количество соединений, которые может обрабатывать ваш сервер.
  • Добавить кеширование страниц, используя что-то вроде varnish
  • Добавить другой сервер и установить баланс между ними
  • Увеличьте возможности существующего сервера (например, увеличьте объем оперативной памяти, обновите процессор, установите более быстрый жесткий диск).

Все эти варианты имеют стоимость, со временем или деньгами. К сожалению, это так:)

Самые быстрые победы, на мой взгляд, вероятно, будут варианты 2 и 3. Но это означает время простоя при их установке или наличие резервного сервера для работы.

Ответ №1

По моему опыту, десятки процессов httpd были атаками DOS. После установки mod_evasive, десятки процессов httpd, отображающихся через верх, были полностью исключены, а загрузка моего mysql загружалась со среднего значения 100% +/99% от использования времени до ожидаемой 20% нагрузки во время более тяжелых операций запроса.

Чтобы установить mod_evasive, в системах RHEL (CentOS/Fedora/Redhat), выполните следующие действия:

yum install -y mod_evasive

Перезапустить Apache

/sbin/service httpd restart

или

systemctl restart httpd

и альта.

Даже если атака DOS не является вашей проблемой, смягчение атак до того, как они произойдут, будет разумным.

Ответ №2

Информация о системе и Httpd

система:

# cat /proc/version

Linux version 3.10.0-514.2.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Dec 6 23:06:41 UTC 2016

Версия Httpd:

# httpd -v

Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 14 2016 18:04:44

Настройка MPF Prefork

Получить MPM по умолчанию

# sudo apachectl -t -D DUMP_MODULES |grep mpm

[Thu Jan 12 16:06:11.778080 2017] [so:warn] [pid 23727] AH01574: module wsgi_module is already loaded, skipping
mpm_prefork_module (shared)

Это означает, что mpm_prefork_module установлен и включен. Вы можете изменить его в режиме event, worker или prefork(default) в файле 00-mpm.conf, путь к файлу которого /etc/httpd/conf.modules.d.

Ссылка на Apache MPM Общие директивы Apache MPM

Добавить личную настройку

# sudo cat >> /etc/httpd/conf/httpd.conf <<-'EOF'
<IfModule prefork.c>
ServerLimit              20
StartServers             15
MinSpareServers           5
MaxSpareServers          10
MaxClients               15
MaxRequestsPerChild      25
</IfModule>
EOF
  • Моя виртуальная машина имеет 2 ГБ памяти и 2 процессора

Прочитайте подробности этой настройки в вышеупомянутой ссылке.

Перезапустить Httpd

# sudo systemctl restart httpd.service

Проверить статус

# systemctl status httpd.service

● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2017-01-12 13:40:12 CST; 2h 48min ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 16576 (httpd)
Status: "Total requests: 3625; Current requests/sec: -70.2; Current traffic:   0 B/sec"
Memory: 869.7M
CGroup: /system.slice/httpd.service
├─16576 /usr/sbin/httpd -DFOREGROUND
├─24122 /usr/sbin/httpd -DFOREGROUND
├─24125 /usr/sbin/httpd -DFOREGROUND
├─24154 /usr/sbin/httpd -DFOREGROUND
├─24157 /usr/sbin/httpd -DFOREGROUND
├─24211 /usr/sbin/httpd -DFOREGROUND
├─24219 /usr/sbin/httpd -DFOREGROUND
└─24236 /usr/sbin/httpd -DFOREGROUND

Jan 12 13:40:12 192-168-1-68.node systemd[1]: Starting The Apache HTTP Server...
Jan 12 13:40:12 192-168-1-68.node httpd[16576]: [Thu Jan 12 13:40:12.614941 2017] [so:warn] [pid 16576] AH01574: module wsgi_module is already loaded, skipping
Jan 12 13:40:12 192-168-1-68.node systemd[1]: Started The Apache HTTP Server.

или

# ps aux|grep httpd

root     16576  0.0  0.0 232232   504 ?        Ss   13:40   0:01 /usr/sbin/httpd -DFOREGROUND
apache   24296 10.9  4.8 542936 91500 ?        S    16:29   0:16 /usr/sbin/httpd -DFOREGROUND
apache   24310 10.6  4.7 542804 89752 ?        S    16:29   0:15 /usr/sbin/httpd -DFOREGROUND
apache   24343 11.2  6.5 542804 123944 ?       S    16:29   0:15 /usr/sbin/httpd -DFOREGROUND
apache   24344 11.1  6.5 542804 124084 ?       S    16:29   0:14 /usr/sbin/httpd -DFOREGROUND
apache   24345 11.6  6.7 542804 126616 ?       S    16:29   0:15 /usr/sbin/httpd -DFOREGROUND
apache   24347 11.0  6.6 542804 125764 ?       S    16:29   0:14 /usr/sbin/httpd -DFOREGROUND
apache   24377 12.0  6.7 542804 126396 ?       S    16:29   0:15 /usr/sbin/httpd -DFOREGROUND
apache   24378 12.4  6.7 542804 126448 ?       S    16:29   0:15 /usr/sbin/httpd -DFOREGROUND
apache   24408 12.3  6.6 542804 126032 ?       S    16:29   0:14 /usr/sbin/httpd -DFOREGROUND
apache   24450 18.6  5.4 511560 102520 ?       R    16:30   0:10 /usr/sbin/httpd -DFOREGROUND
apache   24458 19.4  4.7 498476 89548 ?        S    16:30   0:08 /usr/sbin/httpd -DFOREGROUND
apache   24466 21.4  4.5 495424 86416 ?        R    16:31   0:07 /usr/sbin/httpd -DFOREGROUND
apache   24484  0.5  0.3 236456  5760 ?        S    16:31   0:00 /usr/sbin/httpd -DFOREGROUND
root     24496  0.0  0.0 112652   964 pts/0    S+   16:31   0:00 grep --color=auto httpd

Мои серверы apache получают запрос со скоростью 2 секунды. До этого число процессов httpd увеличивалось до тех пор, пока система не остановилась. После установки MPM Prefork он отлично работает.

Оцените статью
TechArks.Ru
Добавить комментарий