Навесили на меня на работе администрирование хостинга. Конфигурация стандарт, ISPConfig. Сижу я значит, штудирую ООП в PHP и тут мне сообщают, что сервак подвис. Вообще задача администрирования – это задача системного администратора, а я программист. Это совсем разные профессии. Так же я всегда говорю – я не дизайнер.
Дальнейшие данные настроек с моего тестового сервера и ни в коем случае не относятся к реальной работе.
Ну что ж. Допустим Apache создает слишком много процессов, сжирает всю память и виснет.
Для избежания этого нужно поправить конфиг Apache, а именно значения для модулей prefork, work, event.
Для Prefork выставил
1 2 3 4 5 6 7 8 |
StartServers 1 MinSpareServers 1 MaxSpareServers 4 MaxClients 15 ServerLimit 15 MaxRequestsPerChild 1000 |
ServerLimit ставим по формуле ram/RSS. Средний RSS (Resident State Size) чайдлов можно прикинуть командой
1 2 3 |
ps -ax -O vsz,rss |
Покажется полный список процессов и два размера – виртуальный (VSZ) и фактический (RSS). Получается, если средний RSS где то 15М, то 256M/15M=17
В моем случае
1 2 3 4 5 6 7 8 9 |
ps -ax -O vsz,rss | grep apache2 7861 55880 18548 S ? 00:00:00 apache2 7869 27572 6744 S ? 00:00:00 apache2 7872 57488 15980 S ? 00:00:00 apache2 7877 57484 15192 S ? 00:00:00 apache2 7964 56376 11556 S ? 00:00:00 apache2 7975 56620 11648 S ? 00:00:00 apache2 |
1 2 3 4 5 |
cat /proc/meminfo MemTotal: 1544948 kB MemFree: 169284 kB |
Исходить решил не из общей памяти, а из свободной на сервере, у меня вышло примерно 15-17.
Далее интересны еще настройки KeepAlive. Это нужно выставить On в конфиге, чтобы удерживалось соединение.
1 2 3 4 |
MaxKeepAliveRequests 100 KeepAliveTimeout 30 |
Для php.ini важный момент memory_limit. Если он равен -1 то память для скрипта не ограничена, на разных хостах он стоит от 32 до 64мб, я поставил 100.
И еще нужно установить очень важный модуль против ДДос атак mod_evasive.
Установка из портов
1 2 3 |
cd /usr/ports/www/mod_evasive && make && make install && make clean |
Или
1 2 3 |
apt-get install libapache2-mod-evasive |
Добавить настройки в конфиг апача.
1 2 3 4 5 6 7 8 9 10 |
<ifmodule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 300 </ifmodule> |
После чего перезапустим Апач
1 2 3 |
srv2# /usr/local/etc/rc.d/apache restart |