Я пытаюсь настроить веб-сервер на VPS. Моя проблема заключается в том, что использование памяти процессами php-cgi увеличивается со временем, даже если веб-сайт вообще не получает никакого трафика. (пока что за брандмауэром)
VPS имеет 360 МБ оперативной памяти. Я использую Debian Lenny 32bit и его пакеты lighttpd и php5-cgi. Помимо некоторых изменений конфигурации (перечисленных ниже), я использую стандартную настройку Debian.
Сайт основан на Drupal. Используя модуль devel Drupal, я могу сказать, что использование PHP-скриптов в памяти в среднем составляет менее 20 КБ и никогда не превышает 8 МБ.
Вот соответствующие части из вывода ps aux
:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 29871 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29873 0.0 7.4 65808 27468 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29874 0.0 3.7 55808 13736 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29875 0.0 4.3 58040 16204 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29876 0.0 4.4 57444 16288 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29877 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29879 0.0 9.6 67140 35684 ? S Aug12 0:26 /usr/bin/php-cgi
www-data 29880 0.0 6.6 59172 24492 ? S Aug12 0:23 /usr/bin/php-cgi
www-data 29881 0.0 7.1 59784 26388 ? S Aug12 0:22 /usr/bin/php-cgi
www-data 29882 0.0 7.4 60880 27440 ? S Aug12 0:23 /usr/bin/php-cgi
- Нормально ли иметь такой большой php-cgi?
- Можно ли оценить использование памяти php-cgi на основе настроек?
- Любые советы по снижению потребления памяти процессами php-cgi?
Поиск известных утечек памяти не дал ничего значимого. И я был бы удивлен, если бы стандартные пакеты Debian / config имели такую очевидную утечку памяти. Другие пользователи на том же хосте не имеют этой проблемы.
То, что я сделал до сих пор, установлено PHP_FCGI_MAX_REQUESTS
в низкое значение, чтобы процессы php-cgi быстро перерабатывались. Когда я использую ab
для имитации высокой нагрузки, это работает очень хорошо. Процессы быстро умирают, прежде чем они становятся больше, чем 10 МБ. Однако при низкой и средней нагрузке все процессы стабильно растут (из-за балансировки нагрузки), и большинство из них одновременно потребляют более 28 МБ, что подвергает мой VPS риску замены. Обратите внимание, что даже без какого-либо трафика процессы неуклонно растут.
Я могу уменьшить количество процессов php-cgi, но это скорее обходной путь, чем исправление. Я был бы удивлен, если бы php-cgi нормально рос таким образом.
Кроме того, суммирование общих номеров RSS для процессов php-cgi дает:
$ ps -C php-cgi -o rss= | awk '{s+=$1}END{print s/1024}'
195.738
Тем не менее, free -m
дает следующий вывод:
total used free shared buffers cached
Mem: 360 351 8 0 33 190
-/+ buffers/cache: 127 232
Swap: 255 0 255
- Я что-то пропустил? Почему используемая память (без буферов) меньше общей резидентной памяти процессов php-cgi на хосте?
У меня есть следующие расширения PHP:
php5-cgi php5-common php5-curl php5-gd php5-mysql php5-xcache
xcache.size
установлен на 24M. Раньше он был 32M, но уменьшить его не помогло. xcache.var_size
установлено в 0. Остальные плагины используют стандартную конфигурацию. Страницы администрирования xcache показывают, что xcache использует менее 1 МБ.
PHP memory_limit
установлен на 32M.
Вот мой конфиг FastCGI:
fastcgi.server = ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "1000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
Я использую более или менее акции, lighttpd.conf
которые поставляются с Debian.
Пожалуйста, дайте мне знать, если есть какие-либо другие данные, которые я могу предоставить.
Любая помощь приветствуется. Я пытался решить эту проблему в течение нескольких дней. У меня закончились идеи.
Часто такие проблемы возникают из-за некоторого кэша кода операции, такого как XCache, или из-за расширения PHP memcached.
источник
Удалите неиспользуемые библиотеки из /etc/php5/apache2/conf.d. Вероятно, вам не нужны pdo.ini и pdo_mysq.ini или mysqli.ini. Это сэкономит несколько Mega of Ram.
источник