Настройка серверов

PHP memory_limit — понимаем и готовим правильно

В рамках проекта server [admin] мы занимаемся настройкой и администрированием web-серверов. И, конечно, к нам обращаются за решением проблем с уже существующими, т.н. «боевыми» серверами.

Мы часто находим ошибки в конфигурации сервера, особенно если до нас на сервере работали разного рода «специалисты». Одной из наиболее частых проблем является неправильное значение параметра PHP memory_limit.

Что такое параметр PHP memory_limit

Итак, важно понимать, что значение PHP memory_limit — это значение для каждого исполняемого скрипта PHP.  Можно представить себе это как ограничение скорости для автомобилей при движении по дороге — ограничение действует для каждого автомобиля и составляет конкретное значение — 60 км/ч, к примеру.

Для чего нужен параметр PHP memory_limit

Параметр PHP memory_limit появился именно для ограничения занимаемой оперативной памяти, которую использую PHP скрипты. Чаще всего проблемы с использованием памяти возникаю в плохо написанных скриптах. И вот для того, чтобы скрипт с допущенной утечкой памяти  не «съел» всю доступную память сервера и был внедрен параметр PHP memory_limit.

Как проявляется проблема

Скорее всего в логах ошибок интерпретатора PHP будет что-то вроде:

 Fatal error: Allowed memory size of x bytes exhausted (tried to allocate x bytes) in /path/to/php/script

или

 PHP Fatal error: Out of memory (allocated x) (tried to allocate x bytes) in /path/to/php/script

Пример ошибочной конфигурации

Реальный кейс — подключаемся к серверу у которого 2048Мб (2Гб) оперативной памяти. Кто-то установил memory_limit значение 1024М (1Гб), полагая, что таким образом ограничит использование интерпретатором PHP памяти в 1Гб. В общем-то логично, но, к сожалению — это так не работает. На этом сервере криво был написан скрипт на PHP и памяти он потреблял около 800Мб, что само по себе — ненормально.

Так вот, пока скрипт запускался 1 — 2 раза одновременно — проблем не было, однако, когда на ресурс возросла нагрузка и скрипт запустился 3 или 4 раза одновременно (ну просто к одному и тому же скрипту обратились разные пользователи одновременно) — начались «падения» сервера и ошибки в логах. А так как скрипт потребляет 800Мб — ограничение в 1Гб не было достигнуто, что приводило к краху системы, ведь для запуска 3-х таких скриптов требовалось уже около 2,5Гб Памяти, а в наличии только 2Гб.

Где изменить и какую величину PHP memory_limit использовать

Настройка этого параметра производится в файле php.ini и имеет вид:

memory_limit = 128M

Альтернативно (в случае использования Apache в качестве бекенд-сервера) — можно использовать файл .htaccess и добавить туда директиву:

php_value memory_limit 128M

Мы рекомендуем использовать максимум 128Мб для ограничения PHP memory_limit, а лучше еще меньше. Если скрипту требуется больше 128Мб памяти, то в большинстве случаев требуется ревизия и оптимизация кода скрипта.

Выводы

Повторим еще раз — PHP memory_limit — это параметр для каждого отдельного скрипта PHP, а не ограничение для РНР в целом. И его неправильная настройка рано или поздно приведет к «падению» сайта и его недоступности для клиентов, что очень плохо как для ранжирования в поискоых системах, так и для репутации ресурса.

Для правильной настройки сервера необходимо обладать достаточными компетенциями и опытом соответствующей настройки. И мы крайне не рекомендуем допускать к настройкам сервера сомнительных «специалистов».

Специалисты server [admin] с удовольствием настроят Вам web-сервер так, как нужно.

 

 

Насколько полезна была статья?

Средний рейтинг 3.8 / 5. Количество проголосовавших: 10

Никто пока не проголосовал

Related Articles

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Back to top button