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

Тайм-аут поддержки активности Apache

У меня есть сервер с 2 ядрами и 2 ГБ оперативной памяти, который борется с использованием памяти.

Когда я запускаю free -m, я регулярно получаю менее 50 МБ свободного места - прямо сейчас он показывает 378 МБ, когда на сайте только 1 пользователь:

             total       used       free     shared    buffers     cached
Mem:          1869       1772         96          5         34        247
-/+ buffers/cache:       1491        378
Swap:         1023         34        989

Когда я запускаю ps-aux, я вижу множество запросов httpd, которые начались вчера и все еще открыты.

apache    5789  0.0  3.8 1038176 72904 ?       S    03:18   0:27 /usr/sbin/httpd
apache    5790  0.0  3.3 1029400 64216 ?       S    03:18   0:26 /usr/sbin/httpd
apache    5792  0.1  3.4 1031124 65876 ?       S    03:18   0:35 /usr/sbin/httpd
apache   28042  0.1  3.3 1029648 64868 ?       S    04:53   0:28 /usr/sbin/httpd
apache   28043  0.0  3.8 1038412 73420 ?       S    04:53   0:23 /usr/sbin/httpd
apache   31728  0.1  3.8 1038516 73008 ?       S    07:53   0:14 /usr/sbin/httpd
root     31912  0.0  0.7 968160 14860 ?        Ss    2014   0:03 /usr/sbin/httpd
apache   31914  0.0  0.0 246808  1364 ?        S     2014   0:01 /usr/sbin/httpd
apache   31915  0.1  3.7 1038644 71700 ?       S     2014   1:02 /usr/sbin/httpd
apache   31916  0.1  3.7 1038480 71844 ?       S     2014   0:56 /usr/sbin/httpd
apache   31917  0.0  3.1 1026120 60044 ?       S     2014   0:52 /usr/sbin/httpd
apache   31920  0.1  4.1 1045972 79940 ?       S     2014   0:59 /usr/sbin/httpd
apache   31921  0.0  3.8 1039180 73040 ?       S     2014   0:50 /usr/sbin/httpd
apache   31923  0.1  3.3 1029684 63908 ?       S     2014   0:59 /usr/sbin/httpd
apache   31924  0.1  3.2 1027808 61632 ?       S     2014   0:53 /usr/sbin/httpd
apache   31927  0.1  3.2 1027844 61664 ?       S     2014   0:54 /usr/sbin/httpd
apache   31929  0.1  3.8 1039660 73528 ?       S     2014   0:59 /usr/sbin/httpd
apache   31931  0.1  3.2 1028592 62492 ?       S     2014   0:58 /usr/sbin/httpd
apache   31933  0.0  3.2 1029036 62876 ?       S     2014   0:52 /usr/sbin/httpd
apache   31934  0.1  3.3 1029568 63232 ?       S     2014   0:54 /usr/sbin/httpd
apache   32022  0.0  3.8 1038928 73104 ?       S     2014   0:41 /usr/sbin/httpd

Вывод top, отсортированный по использованию памяти:

31920 apache    20   0 1021m  78m 9064 S  0.0  4.2   0:59.48 httpd
31929 apache    20   0 1015m  71m 8428 S  0.0  3.8   1:02.44 httpd
28043 apache    20   0 1014m  71m 9176 S  0.0  3.8   0:26.59 httpd
32022 apache    20   0 1014m  71m 8796 S  0.0  3.8   0:44.04 httpd
31921 apache    20   0 1014m  71m 8408 S  0.0  3.8   0:51.95 httpd
31728 apache    20   0 1014m  71m 8768 S  0.0  3.8   0:15.00 httpd
 5789 apache    20   0 1013m  71m 8716 S  0.0  3.8   0:28.57 httpd
  591 apache    20   0 1013m  71m 8756 S  0.0  3.8   0:42.92 httpd
31916 apache    20   0 1014m  70m 8368 S  0.0  3.8   0:59.94 httpd
31915 apache    20   0 1014m  70m 8384 S  0.0  3.7   1:04.74 httpd
 5792 apache    20   0 1006m  64m 8744 S  0.0  3.4   0:37.37 httpd
 5790 apache    20   0 1006m  63m 8800 S  0.0  3.4   0:28.23 httpd
28042 apache    20   0 1005m  63m 9176 S  0.0  3.4   0:29.50 httpd
  584 apache    20   0 1006m  62m 8456 S  0.0  3.4   0:37.14 httpd
  586 apache    20   0 1006m  62m 8412 S  0.0  3.4   0:44.48 httpd
  588 apache    20   0 1006m  62m 8424 S  0.0  3.4   0:43.11 httpd
  587 apache    20   0 1006m  62m 8420 S  0.0  3.4   0:47.20 httpd
31923 apache    20   0 1005m  62m 8796 S  0.0  3.3   1:01.21 httpd
31933 apache    20   0 1005m  62m 8376 S  0.0  3.3   0:54.89 httpd
31927 apache    20   0 1004m  60m 8392 S  0.0  3.2   0:58.68 httpd
31924 apache    20   0 1003m  60m 8412 S  0.0  3.2   0:53.68 httpd
31934 apache    20   0 1003m  60m 8408 S  0.0  3.2   0:56.56 httpd
31917 apache    20   0 1003m  60m 8404 S  0.0  3.2   0:54.97 httpd
 1871 root      20   0  157m  17m 1968 S  0.0  0.9   0:53.10 lfd
 5597 apache    20   0  952m  16m 5212 S  0.0  0.9   0:01.02 httpd
31912 root      20   0  945m  14m  13m S  0.0  0.8   0:03.37 httpd
 5854 root      20   0 98364 4676 3672 S  0.0  0.2   0:00.09 sshd
 6557 postfix   20   0 82264 4420 3292 S  0.0  0.2   0:00.04 cleanup
 6560 postfix   20   0 82168 4316 3324 S  0.0  0.2   0:00.03 smtp
 4411 postfix   20   0 81964 4048 3096 S  0.0  0.2   0:00.04 pickup
 5856 root      20   0  105m 1944 1528 S  0.0  0.1   0:00.02 bash

В моем httpd.conf у меня есть:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2


<IfModule prefork.c>
StartServers       4
MinSpareServers    12
MaxSpareServers   24
ServerLimit      50
MaxClients       50
MaxRequestsPerChild  3000
</IfModule>

Исходя из вышеизложенного, я предполагаю, что это означает, что KeepAlive включен, но он будет поддерживать активность любого сеанса только в течение 2 секунд - если это правильно, почему у меня все еще работает много процессов со вчерашнего дня и как я могу исправить это?

Чтобы подтвердить, что Apache забирает всю вашу память, вы можете использовать этот фрагмент:

function memperuser() {
ps aux | awk 'NR != 1 {x[$1] += $4} END{ for(z in x) {print z, x[z]"%"}}'
}

Затем введите мемпер.

Еще один полезный способ увидеть разбивку разделяемой и частной памяти - использовать ps_mem.py

Это покажет вам, сколько общей и частной памяти потребляет Apache.

Вам также следует просмотреть все записи LoadModule в вашем httpd.conf и определить, нужны ли вам все они. Обычно главный виновник - mod_php. Если вам не нужен PHP, просто отключите этот модуль. Он может загружаться в своей собственной конфигурации в httpd.d /

Если вы не используете PHP, вы также можете уменьшить объем памяти, занимаемый Apache, используя mpm_event или mpm_worker вместо mpm_prefork. В Apache На веб-сайте есть действительно хорошая документация по использованию различных модулей MPM.

Вы можете еще больше уменьшить объем памяти, используя новейшие APR апр, апр-утиль и апр-iconv и ветка Apache 2.4. То, как вы собираетесь компилировать и / или устанавливать, сильно зависит от ваших настроек, поэтому я обращусь к форуму вашей конкретной ОС.

Все эти параметры действительно зависят от того, как вы используете Apache.

keepalive и KeepAliveTimeout только контролирует, как долго сеанс для клиента остается активным, но если сеанс закрыт, это вовсе не означает, что процесс будет убит, поскольку любому процессу в вашей конфигурации разрешено обрабатывать до 3000 запросов (MaxRequestsPerChild).

Ваша система настроена так, чтобы поддерживать до 24 простаивающих процессов Apache (12 запускаются сразу после запуска Apache) (Параметры MinSpareServers и MaxSpareServers).

Однако простаивающий процесс Apache обычно не использует весь объем оперативной памяти сам по себе, большая часть используется совместно со всеми другими процессами. Вам нужно выяснить, что на самом деле съедает оперативную память и почему.