Настройка и оптимизация оперативной памяти в PHP на сервере

PHP отлично конфигурируется и его можно подстроить под любую машину, в этом его безусловная прелесть. Давно я был сторонником выставления параметров PHP по максимуму, но как оказалось этого делать вовсе не следует т.к. падает производительность и, как следствие, страницы сайта загружаются дольше.

Речь сейчас идёт именно о оперативной памяти выделяемой скрипту для выполнения необходимых действий. По умолчанию в файле конфигурации ПХП php.ini лимит оперативной памяти стоит в 128 мегабайт. Этого на самом деле весьма достаточно для практически любого сайта. Напомню, что этот параметр в файле конфига выглядит так:

memory_limit = 128M

Реально увеличивать его стоит только в том случае, если ваш сервер будет заниматься какими то либо посторонними и не стандартными задачами. Например будет парсить выдачу поисковой системе или, что либо ещё в этом духе. Для обычных же сайтов, будь они самописные или на готовых CMS движках, лимита в 128 мегабайт вполне предостаточно.

Расскажу немного о возникшей у меня ситуации. У меня был VDS с 512 мегабайтами памяти на борту. Мне понадобилось импортировать через phpMyAdmin бекап базы данных, которая была заархивированна и весило всё это дело порядка 100 мегабайт, без архивации и того больше, около 400 мегабайт. Так вот у меня никак не удавалось поднять базу обычным импортом через phpMyAdmin, скрипт постоянно выдавал ошибку. Явно, что ему не хватало оперативной памяти на выполнение, а так же времени на выполнение скрипта было так же не достаточно.

Так вот я увеличил memory_limit до максимальных для моего виртуального сервера 512 мегабайт и так же время выполнения скрипта продлил со стандартных 30 секунд до неимоверной цифры в 9999999 секунд. База успешно импортировалась, максимальное время выполнения скрипта я откатил до стандартных 30 секунда, а максимальную оперативную память для скрипта оставил как есть. Позже заметил, что сайт достаточно долго грузится. Я сначала не понял в чём дело и принялся смотреть графики нагрузки на процессор сервера и трафика сети. Нагрузка на центральный процессор была в норме и не превышала даже половины, тоже самое и с трафиком — канал был свободен. Позже я вспомнил про то, что менял параметр memory_limit в php.ini и в этом то и было всё дело. Зашёл и поставил как было на 128 мегабайт. Перезагрузил сервер и о чудо, сайт начал работать гораздо быстрее. Отсюда вывод: не ставьте максимальный лимит памяти на максимальную для вашего сервера отметку.

Всё дело в том, что пока выполняется php скрипт для одного запроса ему выделяется сервером это число оперативной памяти и если её больше нет, то остальные скрипты (для других пользователей сайта) будут просто ждать пока для них освободятся ресурсы. Таким образом страницы строятся очень долго т.к. им приходится ждать когда освободятся ресурсы сервера. Не сложно подсчитать, что с такими параметрами и настройками, одновременно могут работать не более 4 скриптов PHP одновременно. Т.о. одновременно запросить страницы сайта с сервера без задержки смогут только 4 пользователя, которым будет выделено по 128 мегабайт на выполнение PHP скриптов. Остальным же придётся немного подождать пока ресурсы сервера освободятся. Понятное дело, что в идеала даже не 4 т.к. сама операционная система, её процессы и дополнительное ПО так же забирают какую то часть от общего размера памяти.

Отсюда можно сделать много выводов. К примеру можно максимально оптимизировать работу вашего сервера за счёт наиболее корректной выстановки параметров в php.ini. Как правило 128 мегабайт для одного PHP скрипта это достаточно много. На моём блоге внизу расположена информация о каждом построении страницы по запросу. Там написано затраченное время, количество подключений к СУБД MySQL и самое главное количество затраченной на всё это оперативной памяти. Оказалось, что в среднем для построения страницы моего блога требуется около 15 мегабайт ОЗУ, это без кэширования. Добавлю, что WordPress один из самых тяжёлых движков, он весьма требовательный к ресурсам системы. Я смотрел разные таблицы опытов и оказалось, что тройку самых прожорливых CMS возглавляют следующие системы управления контентом:

  1. MediaWiki
  2. WorpPress
  3. Joomla

И это без всяких дополнительных плагинов, чисто комплектация из коробки. Т.е. получается, что один из самых требовательных движков в среднем потребляет не более 20 мегабайт памяти на построение страниц, у меня 15 ещё и из-за того, что доставлены всякие плагины, думаю в чистом виде цифра была бы не больше 10 мегабайт. Так вот получается, что если ваш сервер будет достаточно нагруженным, то время его можно будет немного оптимизировать за счёт поткрутки параметров PHP. Думаю макс лимит ОЗУ при больших нагрузках можно поставить и на 64 или 32 мегабайта, для обычных целей этого вполне должно хватить. Конечно с такими маленькими лимитами можно забыть о поднятии (в частности архивации и разархивации) больших дампов баз данных через тот же phpMyAdmin, но это не страшно. Ведь всегда можно обойтись и без архивации. Можно импортировать и экспортировать дампы в чистом виде с расширением sql. Как правило это не кушает много ресурсов, а просто занимает дольше времени. Тем более всё это можно делать кусками.

В общем оптимизируйте оперативную память правильно и тогда не придётся доплачивать за выделение дополнительных ресурсов для ваших серверов.

Для полноты картины допишу стандартные пути расположения конфигурационных файлов php.ini для php пятой версии в популярных средах.

  • Z:\usr\local\php5\php.ini — пакет разработчика Denwer в среде ОС Microsoft Windows.
  • /etc/php5/apache2/php.ini — GNU/Linux Ubuntu

Вот теперь точно всё, спасибо за внимание.

Поделиться!
Tags: , , , , , , , , , , ,

49.72MB | MySQL:55 | 0,294sec