imagemagick - 无法使用 ImageMagick 限制内存使用量
问题描述
我正在使用命令 [1] 配置 ImageMagick 以生成 PSD 缩略图。它非常适用于小尺寸 PSD,但在处理 2GB PSD 时,服务器 CPU 和内存使用量将在几分钟内不断增加到 100%,直到进程被服务器终止。
CPU 和内存利用率无法由 /etc/ImageMagick/policy.xml[2] 中的配置控制。发生这种情况时还附上了 ImageMagick 日志[3]。
服务器:CentOS 6.9,8核CPU,32G内存,500G磁盘
[1] 转换 one-page.psd -flatten -thumbnail 1280x1280 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>
解决方案
推荐阅读
- r - 使用多个对象的 ID 名称创建列
- modx-revolution - 将带有架构和 JavaScript 的自定义 HTML 输入到单个页面 modx 的问题
- vue.js - 数组中字符串的Vuejs反应式绑定
- amazon-web-services - 如何在 Appsync 中使用 OpenID Connect 验证订阅?
- javascript - 检查对象是否包含值 0 并注入 DOM
- php - PDO 如何在查询中使用“?”而不绑定该符号的数据
- c++ - 为什么在小型程序中工作时模板类定义在大型程序中不起作用?
- ios - Ionic - ngModel 在 App Store 审核期间未提交密码字段
- flutter - 如何在特定事件后更改 CheckboxListTile 的标题?
- .htaccess - .htaccess : 错误的重定向