Назад | Перейти на главную страницу

Что на самом деле контролирует $ wgMaxShellMemory в MediaWiki?

Мой главный вопрос: ограничивает ли wgMaxShellMemory общую память, используемую всеми процессами для задач оболочки, таких как создание миниатюр ImageMagick? Или это скорее ограничение на процесс? Документация по этому параметру кажется расплывчатой.

У меня есть вики, которая использует слишком много памяти на общем хосте. Я сузил причину до ImageMagick, использующего слишком много памяти при преобразовании загруженных изображений. Я уменьшил максимальный размер загрузки в php.ini, что поможет, но я надеялся, что wgMaxShellMemory послужит жестким ограничением для общего использования памяти ImageMagick и другими фоновыми процессами MediaWiki.

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

Во-первых, ограничение памяти применяется только к GNU / Linux, а не, например. Windows.

Краткий ответ: это ограничение для каждого процесса для сценария bash, которое, вероятно (это верно для «его дочерних» систем, и в противном случае ограничение мало используется) также применимо к дочерним процессам. Таким образом, каждый вызов ImageMagick имеет свой отдельный лимит.

Создание миниатюр для изображений не входит в очередь заданий (другое дело - мультимедиа, например видео).


Подробности:

По умолчанию это работает так:

  1. Когда вызывается wfShellExec, он создает новый процесс bash с proc_open.
  2. Это запускает сценарий bash под названием limit.sh.
  3. Этот новый процесс bash устанавливает предел памяти (wgMaxShellMemory), используя ulimit -v.
  4. Затем процесс bash запускает нужную команду либо с / usr / bin / timeout (если также есть ограничение на настенные часы), либо оценка.

Страница руководства для ulimit bash говорит '-v': «Максимальный объем виртуальной памяти, доступной оболочке, а в некоторых системах - ее дочерним компонентам».

ПРИМЕЧАНИЕ: есть опция использовать cgroups, но по умолчанию он выключен.