Ограничение использования памяти ImageMagick - PullRequest
7 голосов
/ 02 января 2012

В основном я пытаюсь сохранить использование памяти на моем сервере Nginx на определенном уровне, так как я безумен (по словам моих друзей) и хочу сэкономить.Однако я обеспокоен тем, что ImageMagick может выдвинуть его за край.

Я использую -limit area 20MiB, и я также попытался -limit memory 15MiB -limit map 15MiB, но при проверке процесса (как он выполняется) через top -c (with Shift-M) иps aux показывает, что использует иногда значительно больше памяти, чем я установил в пределах.Чтобы дать цифры, он может использовать 35 МБ или 40 МБ вместо 20 МБ / 30 МБ, как я ожидал.Я не буду беспокоиться о 2 МБ или 3 МБ, но это довольно большое смещение.

Мне сказали, что дополнительная память может быть накладными расходами ImageMagick, поскольку она загружает интерпретатор и т. Д., Но я не очень знакомыйс Unix-программами, поэтому не имею понятия в этом отделе.

Если кто-нибудь может объяснить, почему это происходит, это было бы здорово.Если это нормально, отлично.Я просто настрою вещи, чтобы учесть тот факт, что он может использовать мой лимит плюс определенную сумму, но если это не так, а параметр -limit не ограничивает память до определенного количества, то какой именно смыслналичие этого параметра в ImageMagick?

Еще раз спасибо за вашу помощь заранее, как всегда, очень признателен.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2013

Ограничения влияют только на пиксельный кеш ImageMagick. Программный код и все, что могут сделать библиотеки / делегаты для загрузки или обработки изображений, не зависят от этих настроек.

Вы не указываете, что вы смотрите сверху, правильный столбец, очевидно, будет RES или RSIZE. При таких небольших пределах, как 20 МБ, код программы и библиотеки будет представлять значительную долю размера резидентного набора.

Чтобы убедиться, что вы используете правильные единицы измерения для переменных среды, используйте identify -list resource. Если размер кэша пикселей памяти (MAGICK_MEMORY_LIMIT) недостаточен для изображения, будет использоваться файл mmap-ed (MAGICK_MAP_LIMIT), а если этот предел слишком мал, вместо него используется обычный дисковый файл (MAGICK_DISK_LIMIT). Если все ограничения слишком малы, ImageMagick немедленно завершится с ошибкой, такой как cache resources exhausted, Memory allocation failed или corrupt image.

2 голосов
/ 23 июля 2012

В соответствии с документацией ImageMagick перемещает все операции с памятью в файлы mmaped, поэтому при наличии достаточного места на диске он начнет перестановку, см. Руководство: SNIP из руководства -limit :

Значение для файла указывается в количестве файлов.Ограничение диска в гигабайтах, а значения других ресурсов в мегабайтах.По умолчанию это 768 файлов, 1024 МБ памяти, карта 4096 МБ и неограниченный диск, но они настраиваются во время запуска на платформах, которые могут предоставить информацию о доступных ресурсах.Когда лимит будет достигнут, ImageMagick каким-то образом потерпит неудачу или предпримет компенсирующие действия, если это возможно.Например, -limit memory 32 -limit map 64 ограничивает память Когда пиксельный кеш достигает предела памяти, он использует отображение памяти.Когда этот предел достигнут, он отправляется на диск.Если диск имеет жесткий лимит, программа завершится ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...