Не удается ограничить использование памяти с помощью ImageMagick

#imagemagick

#imagemagick

Вопрос:

Я настраиваю ImageMagick для создания эскизов PSD с помощью команды [1]. Это отлично работает для PSD небольшого размера, но при обработке PSD размером 2 ГБ загрузка процессора сервера и памяти будет увеличиваться до 100% в течение нескольких минут, пока процесс не будет остановлен сервером.

Не удалось управлять использованием процессора и памяти с помощью конфигурации на /etc/ImageMagick/policy.xml [2]. Также прикреплен журнал ImageMagick [3], когда это происходит.

Сервер: CentOS 6.9, 8-ядерный процессор, 32 ГБ памяти, диск емкостью 500 ГБ

[1] преобразовать одностраничный файл.psd -сгладить -миниатюра 1280×1280 thumbnail.jpeg

[2]

 <policymap>
  <policy domain="resource" name="temporary-path" value="/data01/imagemagick-tmp"/>
  <policy domain="resource" name="memory" value="2GiB"/>
  <policy domain="resource" name="map" value="4GiB"/>
  <policy domain="resource" name="disk" value="50GiB"/>
  <policy domain="resource" name="thread" value="1"/>
  <policy domain="resource" name="throttle" value="5"/>
</policymap>
  

[3]

 <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Cache convert[1944]: cache.c/ClonePixelCacheRepository/842/Cache
  Memory => Memory</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Resource convert[1944]: resource.c/RelinquishMagickResource/1069/Resource
  Memory: 70224B/1.33725GiB/2GiB</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Cache convert[1944]: cache.c/OpenPixelCache/3778/Cache
  open One-page.psd[0] (Heap Memory, 418x14x4 93632B)</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDLayer/1493/Coder
      reading data for channel 1</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDChannelRLE/1158/Coder
        layer data is RLE compressed</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDLayer/1493/Coder
      reading data for channel 2</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDChannelRLE/1158/Coder
        layer data is RLE compressed</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDLayer/1493/Coder
      reading data for channel 3</event>
  <event>2019-03-20T18:25:37 08:00 3:45.830 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDChannelRLE/1158/Coder
        layer data is RLE compressed</event>
  <event>2019-03-20T18:25:37 08:00 3:45.840 14.550u 7.0.8 Coder convert[1944]: psd.c/ApplyPSDLayerOpacity/393/Coder
    applying layer opacity 22873</event>
  <event>2019-03-20T18:25:37 08:00 3:45.840 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDImage/2374/Coder
    reading the precombined layer</event>
  <event>2019-03-20T18:25:37 08:00 3:45.840 14.550u 7.0.8 Coder convert[1944]: psd.c/ReadPSDChannelRLE/1158/Coder
        layer data is RLE compressed</event>
  <event>2019-03-20T18:25:39 08:00 3:47.980 14.660u 7.0.8 Coder convert[1944]: psd.c/ReadPSDChannelRLE/1158/Coder
        layer data is RLE compressed</event>
  <event>2019-03-20T18:25:41 08:00 3:50.100 14.770u 7.0.8 Coder convert[1944]: psd.c/ReadPSDChannelRLE/1158/Coder
        layer data is RLE compressed</event>
  

Комментарии:

1. В чем ваш вопрос? Журнал показывает, что вы не достигли своего предела в 2 ГБ.

2. @emcconville Из верхней команды я могу заметить, что использование памяти уже достигает 32 ГБ, что составляет 100% доступной памяти. Журнал просто показывает, что он обрабатывает, когда он потребляет 32 ГБ памяти.