У меня есть 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>
Но получил такой же точный результат!
Что мне не хватает?
Большое спасибо!
Обновить:
Мой предел memory_limit PHP составляет 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 потреблял меньше памяти? Разве я не могу сэкономить память за счет более медленных ответов?
В зависимости от вашей версии Drupal: ядро Drupal 6 требует, чтобы значение memory_limit PHP было не менее 16 МБ. Ядро Drupal 7 требует 32 МБ.
Основываясь на ошибке и вашем сообщении, вы выделили 28 МБ, подтвердите в файле php.ini, что memory_limit установлен правильно. Обязательно перезапустите Apache, чтобы применить любые изменения в php.ini.
Еще один аспект, который следует учитывать, - это другие службы, которые работают на вашем сервере, Apache, MySQL и т. Д. Они также занимают 256 МБ.
Чтобы получить представление о текущем использовании памяти, введите:
free -m
Флаг -m выводит данные в МБ. Ключ -b отображает объем памяти в байтах; переключатель -k (установлен по умолчанию) отображает его в килобайтах.
Вы получите такой результат:
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 в соответствии со значениями ниже и посмотрел, как ведет себя сервер:
Имейте в виду, что Drupal - это системная проблема, и вы можете в конечном итоге обновить VPS до 512 МБ.
-Брендан