Я пытаюсь понять ситуацию, когда PHP не потребляет много памяти, но вместо этого вызывает очень высокий результат Committed_AS
.
Возьмите этот отчет памяти мюнина, например:
Как только я запускаю нашу очередь Laravel (10 ~ 30 рабочих), преданная память проходит через крышу. У нас есть 2G mem + 2G swap на этом экземпляре vps, и до сих пор существует около 600M неиспользуемой памяти (это около 30% бесплатно).
Если я понял Committed_AS
правильно, это означало гарантию 99.9% out of memory
, учитывая текущую рабочую нагрузку, и кажется чтобы предложить нам утроить нашу память VPS, чтобы быть в безопасности.
Я попытался уменьшить количество очередей от 30 до 10, но, как вы видите, зеленая линия довольно высока.
Что касается настройки: Laravel 4.1 с включенным opcache PHP 5.5. Выскочка script используется экземпляр spawn, например:
instance $N
exec start-stop-daemon --start --make-pidfile --pidfile /var/run/laravel_queue.$N.pid --chuid $USER --chdir $HOME --exec /usr/bin/php artisan queue:listen -- --queue=$N --timeout=60 --delay=120 --sleep=30 --memory=32 --tries=3 >> /var/log/laravel_queue.$N.log 2>&1
Я видел много случаев, когда использование с высоким подкачкой подразумевает недостаточную память, но наше использование подкачки низкое, поэтому я не уверен, какой способ устранения неполадок здесь подходит.
PS: у нас нет этой проблемы до Laravel 4.1 и нашего обновления vps, вот изображение, чтобы доказать это.
Возможно, мне следует перефразировать мой вопрос следующим образом: как точно вычисляются Committed_AS и как PHP влияет на него?
Обновлено 2014.1.29:
У меня была теория по этой проблеме: поскольку работник очереди laravel фактически использует PHP sleep()
, ожидая нового задания из очереди (в моем случае beanstalkd
), это предполагает, что высокая оценка Committed_AS
обусловлена относительно низкая рабочая нагрузка и относительно высокое потребление памяти.
Это имеет смысл, поскольку я вижу Committed_AS
~ = avg. memory usage / avg. workload
. Поскольку PHP sleep()
корректно, мало используется процессор; но все же память, которую он потребляет, по-прежнему сохраняется. Какой результат в мышлении сервера: эй, вы используете так много памяти (в среднем), даже когда загрузка минимальна (в среднем), вы должны быть лучше подготовлены к более высокой нагрузке (но в этом случае более высокая загрузка не приводит к увеличению объема памяти след)
Если кто-то хочет проверить эту теорию, я буду рад наградить их наградой.