ImageMagick конвертировать и мало оперативной памяти

12

Пожалуйста, рассмотрите следующую команду для пакета imagemagick:

sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg

Теперь test1.jpgэто довольно большое изображение (12,5 МБ), но не неслыханные размеры, но сервер, с которого я работаю, имеет только 1 ГБ памяти ( Amazon EC2 t2.micro, если это помогает)

Не выдается никакой ошибки, и все же не test2.jpgсоздается. Я проверил это с меньшими изображениями, и это работает отлично. Я бы подумал 1G, если бы памяти было достаточно для управления изменением размера, но, возможно, нет?

Какие у меня варианты, мне нужно больше памяти или я что-то упустил?

Любые предложения приветствуются!

Запрошенные правки

Выходные Трассирования показывает: +++ killed by SIGKILL +++наряду с многими команд , которые выглядят нормально (открытие /usr/share/localи чтение длинных строк, которые я принимаю данные изображений)

бесплатно дает мне:

         total       used       free     shared    buffers     cached
Mem:       1016292     278348     737944       6412        460      13356
-/+ buffers/cache:     264532     751760
Swap:            0          0          0

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

Файл дает мне:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

Я также вставил бы полный путь / путь / к / img, но, к сожалению, он содержит конфиденциальные данные (адреса электронной почты клиента и т. Д.)

Aphire
источник
1
Почему вы используете sudoв этой команде?
Чарльз Грин
1
Получил сообщение «Убито», когда я этого не сделал
Aphire
3
Ypu может попытаться ограничить объем памяти, используемой для пиксельного кэша, с помощью аргумента -limit memory 64MiB(32 МБ, вероятно, слишком мало. По умолчанию 1,5 ГБ). И это должно дать вам некоторый описательный вывод в случае неудачи.
dadexix86
2
Попробуйте выполнить команду, straceдобавив ее перед командой, посмотрите, какие системные вызовы сделаны, и были выданы ошибки. Дайте нам знать
Сергей Колодяжный
2
Выполнено. Я рад, что вы решили это! свободный вывод подтверждает, что своп отключен, а информация о файле подтверждает, что это не ошибочно идентифицированный файл. Хорошее редактирование! +1
Старейшина Компьютерщик

Ответы:

7

Я предполагаю, что у вас заканчивается ОЗУ. Вы можете проверить это с помощью watch cat /proc/meminfoвашего процесса.

Возможно, у вас недостаточно оперативной памяти и / или SWAP для выполнения вашей задачи.

Из-за низкого уровня swapon -aпамяти, убедитесь, что подкачка включена, и если подкачка не настроена в системе, создайте раздел для подкачки на неиспользуемом дисковом пространстве и включите его. Это, вероятно, решит проблему. Хороший ответ от @Takkat о том, как это сделать, здесь. Если у вас нет доступа к разделению сервера, вы также можете использовать файл подкачки для подкачки.

Старейшина Гик
источник
1
ОП - это облачный сервер, поэтому создание раздела подкачки может быть невозможным. Вы можете добавить Как добавить новый файл подкачки тоже.
user.dz
@Sneetsher Это именно то, что я сделал, хороший комментарий
Aphire
@Sneetsher «ОП - это облачный сервер» (по крайней мере для меня) не совсем понятно из данных вопроса, но вы делаете хорошее замечание. редактирование ответа.
Старейшина Гик
@ElderGeek, на самом деле это, но не очень хорошо выделено Amazon EC2 t2.micro, я отредактировал вопрос, чтобы прояснить, добавил тег, чтобы было легко связать его с другими связанными вопросами
user.dz
@ Снишер Я вижу это сейчас. Спасибо за старания!
Старейшина Гик
5

Проблема в вопросе была решена путем добавления соответствующего обмена. Для полноты позвольте мне дать краткий обзор дополнительных параметров, которые мы имеем при запуске Image Magick convertдля больших файлов в системах с низкой памятью, или когда нет доступного подкачки, или если подкачка была слишком маленькой.

Методы, упомянутые ниже, подробно описаны в руководстве Image Magick:

Действительно массовая обработка изображений


Резюме:

  1. Ограничить использование памяти с помощью опции -limit

    Таким образом Image Magick создаст временный файл для обработки изображений, как только будут превышены заданные пределы памяти. Для этого требуется разрешение на запись для Image Magick во временный каталог файлов. Мы можем указать любой путь, по которому временный файл будет создан в переменной окружения MAGICK_TMPDIR. Пример команды может выглядеть примерно так:

        env MAGICK_TMPDIR=/tempdir nice -5 convert -limit memory 32 -limit map 32 largefile.jpg -resize 640x320 smallfile.png
    

    Работа на диске, а не в оперативной памяти значительно замедлит скорость обработки.

  2. Работа с "Дисковые файлы с отображенной памятью"

    Создание файлов MPC требует ресурсов, но для преобразования файлов MPC не требуется так много ресурсов. Поэтому это может быть учтено, если нам нужно конвертировать один и тот же источник с разными параметрами несколько раз. Рабочий процесс может быть похож на это:

    convert huge.jpg huge.mpc
    convert huge.mpc -resize 50% big.png
    convert huge.mpc -resize 20% small.png
    convert huge.mpc -resize 5% thumb.png
    
  3. Работайте над небольшими участками изображения, используя stream

    Использование потоковых заявок для обработки только части исходного изображения без необходимости загрузки всего изображения в память.

    stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - | convert -depth 8 -size 600x400 rgb:- tile.png
    

    В приведенном выше примере -extractопция принимает значения размера и смещения, как определено геометрией Image Magick . Придется склеить плитки, чтобы получить масштабированное изображение в целом. К сожалению, поток не работает для всех форматов изображений, но должен нормально работать с изображениями JPEG.

Takkat
источник