1

Мы часто выходим из памяти, так как fork не может выделить память. Я провел некоторое расследование.

Кажется, что сценарии не так, как я думал до этого. Я поделюсь информацией, которую получу после анализа.

У меня есть изолированный сервер, поэтому другие люди не могут добраться до сервера. Это покажет "истинное" использование памяти в этом случае.

  1. У меня нет mysqld и apache запущен [использование памяти ~ 182mb].
  2. только что начал mysqld. нет никаких соединений с mysqld [mu ~ 340mb].
  3. httpd запущен [~ 360mb].
  4. первый запрос к скрипту. [~ 630mb]. Но!! Самая интересная часть. Память не освобождается. Все выглядит хорошо. Сценарий завершен, страница загружена успешно. Но это все еще около ~ 630mb.

Почему один запрос кушает 270Мб? Почему тот не освобождается после запроса?

Некоторые характеристики:

  • Оперативная память сервера 512 МБ гарантировано
  • 256 мегабайт
  • Ограничение памяти PHP: 256 МБ

httpd.conf

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

1 ответ1

0

Почему один запрос кушает 270Мб?

Вероятно, потому что он получил доступ к большому количеству данных или метаданных в файлах на диске или о них.

Почему тот не освобождается после запроса?

Потому что данные могут быть использованы снова в ближайшее время. Удаление его из памяти после запроса делает следующий запрос дорогостоящим. Имеет больше смысла откладывать освобождение, пока память фактически не понадобится для чего-то еще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .