Apache httpd обрабатывает и PHP не хватает памяти

У меня есть VPS, работающий с apache-php-mysql на centos, и один установленный сайт drupal. VPS имеет 256 МБ оперативной памяти (может быть основной причиной всех моих проблем... может быть, мне просто нужно больше). Всякий раз, когда я пытаюсь открыть свой веб-сайт сразу из нескольких вкладок браузера (около 8... а не 800), происходит сбой apache! У меня есть это в журнале:

[Ср 24 окт. 11:26:31 2012] [ошибка] [клиент xxx] Неустранимая ошибка PHP: Недостаточно памяти (выделено 28049408) (попытка выделить 201335 байт) в xxx в строке 2139, реферер: xxx

Я прочитал много много постов здесь, но я думаю, что есть кое-что фундаментальное, что я упускаю - если я правильно понимаю, некоторый php-скрипт пытался выделить 200 КБ после выделения 28 МБ, и не может это сделать.

Первый вопрос: должно ли это привести к краху apache???

Затем я попытался посмотреть на команду "top", пока я выполняю свой маленький тест. Действительно, я вижу 7 httpd процессов, каждый из которых резервирует около 30 МБ - что объясняет, почему у меня заканчивается ОЗУ.

Как я могу предотвратить создание новых процессов в Apache до тех пор, пока в нем не останется памяти?

Я попытался настроить /etc/httpd/conf/httpd.conf следующим образом:

<IfModule prefork.c>
StartServers       1
MinSpareServers    1
MaxSpareServers    1
ServerLimit        1
MaxClients         1
MaxRequestsPerChild  100
</IfModule>

Но получил точно такой же результат!

Что мне не хватает?

Большое спасибо!

Обновить:

Мой PHP memory_limit равен 128M (подтверждается страницами администрирования drupal...) Вывод free -m:

             total       used       free     shared    buffers     cached
Mem:           256        226         29          0          0          0
-/+ buffers/cache:        226         29
Swap:            0          0          0

Что я могу сделать, чтобы apache занимал меньше памяти? Не могу ли я сохранить память за счет более медленных ответов?

1 ответ

В зависимости от вашей версии Drupal: ядро ​​Drupal 6 требует, чтобы PHP memory_limit был не менее 16 МБ. Ядро Drupal 7 требует 32 МБ.

Исходя из ошибки и вашего сообщения, вы выделили 28 МБ, пожалуйста, подтвердите в файле php.ini, что memory_limit установлен правильно. Обязательно перезапустите Apache, чтобы применить любые изменения в php.ini.

Еще один аспект, который следует учитывать, - это другие службы, работающие на вашем сервере, Apache, MySQL и т. Д. Они также занимают 256 МБ.

To get an idea on the current memory usage you can type:

free -m

The -m flag outputs the data in MB. The -b switch displays the amount of memory in bytes; the -k switch (set by default) displays it in kilobytes.

Вы получите вывод как:

total       used       free     shared    buffers     cached
Mem:         24031      22512       1518        0       1614       8082
-/+ buffers/cache:      12815      11215
Swap:        31999        485      31514

В зависимости от доступной памяти вы можете начать сужать проблему либо до PHP, либо, если вы переросли / увеличили VPS.

РЕДАКТИРОВАТЬ

@Ofri,

Конфигурации Apache нет точных данных. Все сводится к знанию спецификаций машины и в основном проб и ошибок. Мониторинг производительности сервера во время текущих проб и периодов ошибок важен, чтобы вы могли видеть положительное / отрицательное влияние.

Я бы остановил Apache, отредактировал httpd.conf в соответствии со значениями ниже и посмотрел, как ведет себя сервер:

  • MaxKeepAliveRequests 100
  • KeepAliveTimeout 15
  • MinSpareServers 5
  • MaxSpareServers 10
  • StartServers 5
  • MaxClients 150
  • MaxRequestsPerChild 300

Имейте в виду, что Drupal - системная проблема, и в конечном итоге вы можете в конечном итоге обновить VPS до 512 МБ.

-Brendan

Другие вопросы по тегам