Проблемы при запуске shell утилиты convert

Случается что при обработке большого объёма информации при помощи консольной утилиты convert оболочка выдает ошибки типа:

convert-im6.q16: cache resources exhausted '115.gif' @ error/cache.c/OpenPixelCache/3945.

Это может быть связано с тем что утилите convert не хватает системных ресурсов для работы например когда нужно загнать 100500 картинок в один PDF-файл:

$ convert img1.gif img2.gif imgN.gif output.pdf

Проверить лимиты выделенные системой утилите convert можно командой:

$ convert -list resource
Resource limits:
  Width: 16KP
  Height: 16KP
  Area: 2.1475GP
  Memory: 2GiB
  Map: 2GiB
  Disk: 10GiB
  File: 768
  Thread: 8
  Throttle: 0
  Time: unlimited

Это значения по-умолчанию и как видим они довольно скромны. Увеличить лимит ресурсов можно путем редактирования файла: /etc/ImageMagick-6/policy.xml он представляет собой обычный XML-файл и содержит в конце такие строчки:

...
  <policy domain="resource" name="memory" value="256MiB"/>
  <policy domain="resource" name="map" value="512MiB"/>
  <policy domain="resource" name="width" value="16KP"/>
  <policy domain="resource" name="height" value="16KP"/>
  <policy domain="resource" name="area" value="128MB"/>
  <policy domain="resource" name="disk" value="1GiB"/>
...

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

Кстати, если страницы в выходном файле имеют разный размер, то их можно привести в порядок добавив несколько опций к команде конвертации:

$ i=150; convert img1.gif img2.gif imgN.gif \
      -density ${i}x${i} -units PixelsPerInch \
      -resize $((i*827/100))x$((i*1169/100)) \
      -repage $((i*827/100))x$((i*1169/100)) output.pdf