我正在尝试使用以下命令在PSD中将PSD转换为PNG:
#gm convert file.psd -flatten file.png
当Web应用程序处于停滞不前的服务器时,一切看起来都没有问题。 当我将Web应用程序移动到生产服务器时,某些PSD文件将收到以下错误消息:
In GraphicsMagick 1.3.12 : gm convert: Too much image data in file.
或者这个:
In GraphicsMagick 1.2.10 : gm convert: Memory allocation failed (unable to allocate cache info) [Cannot allocate memory].
最荒谬的部分是它在交错服务器中工作,但在生产服务器中不起作用。 不稳定的服务器是VMWare中的FreeBSD,生产服务器是物理服务器。
我在互联网上找到的文档非常少。几个月前这里只有一个帖子: http://sourceforge.net/mailarchive/forum.php?thread_name=20110301013714.GC15521%40node99.net&forum_name=graphicsmagick-help
提到同样的问题,但没有回复。
我想知道我是否可以在这里得到帮助。或许我错了,我应该选择ImageMagick。
答案 0 :(得分:0)
生产服务器可能比暂存VM具有更低的每进程内存限制。也就是说,限制可能是由软件强加的,而不是实际的硬件。
限制可以是每个用户(或者更确切地说,per user-class)以及系统范围(使用sysctl)。尝试运行
% sysctl -Aa|fgrep kern.max
并比较两个服务器之间的输出(kern.maxdsiz和kern.maxssiz特别感兴趣)。另外,尝试简单地以网络服务器用户身份运行限制:
% su # become root
% su -m www # become www
% limits
并再次比较输出。
最后,可能是,您的生产服务器只是使用更多内存(用于其他内容,例如提供其他内容),而登台系统只处理单个文件转换,因此没有达到限制?
答案 1 :(得分:0)
我遇到了这个问题。它似乎是graphicsmagick的限制。如果使用-debug all开关,您将看到psd的解码器正在尝试分配比每个进程可用的内存更多的内存。
例如,我有一个6MB的psd,我想拇指插入jpg。通用汽车公司无法做到这一点,因为它试图立即将其全部膨胀,并且需要64GB的RAM(这是在我的开发机器上,只有8GB)。
我在imagemagick上运行了相同的命令,它没有问题(在我的开发机器上)