У меня есть 2 веб-сервера LAMP, которым постоянно не хватает места для подкачки (см. Прикрепленный верхний снимок экрана).
Настройки Apache следующие:
<IfModule prefork.c> StartServers 64 MinSpareServers 64 MaxSpareServers 128 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4096 </IfModule>
Ограничения ресурсов на PHP:
max_execution_time = 30 max_input_time = 30 memory_limit = 80M
Я новичок в подобных вещах администратора сервера (я разработчик); Что я могу настроить, чтобы предотвратить подкачку?
Вот скриншот сверху на одном из серверов при сбое:
У вас заканчивается своп, потому что вы используете всю свою оперативную память, а затем еще немного. У вас серьезная проблема, которую нужно исправить прямо сейчас.
У вас есть два варианта: игнорировать причину и просто добавить больше оперативной памяти или решить проблему, которая действительно жует вашу память.
Добавление оперативной памяти довольно дешево и довольно просто, если это ваш сервер, но это временное решение, а если это VPS или арендованный сервер, это не так дешево. Вместо этого давайте попробуем исправить корневую проблему. Что засасывает столько памяти? Вот несколько советов:
.htaccess
файлы, но вы можете жестко запрограммировать их функциональность.Что касается простого возврата элементов подкачки в реальную оперативную память, вы можете сделать это следующим образом:
swapoff -a && swapon -a
Но не пытайтесь тогда, когда у вас меньше свободной памяти, чем у вас в свопинге. Это приведет к сбою вашего сервера.
Для быстрого изменения сделайте:
"MaxRequestsPerChild 4096" на что-то вроде: 700 поможет. Чем дольше живет процесс apache, тем больше резидентной памяти он будет потреблять из-за mod_php и т.п. Также включите поддержку активности и установите для него агрессивные настройки тайм-аута:
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 5
Это позволит каждому запросу клиентской страницы использовать один процесс apache для обработки всех своих запросов, тогда как в противном случае он использовал бы несколько процессов apache. Это сократит количество процессов apache, запущенных в любой момент времени.
Для оптимальной памяти и запросов в секунду:
Отойдите от mod_php и используйте вместо него fastcgi или другой сервер приложений. Процессы Apache потребляют незначительный объем памяти, когда php-страницы обслуживаются fastcgi. Не говоря уже о том, что fastcgi может, среди прочего, поддерживать постоянные соединения с вашим сервером dbase.
как насчет переноса обслуживания статического контента на лучше подходящий сервер?