0

我正在尝试使用以下命令在 GraphicsMagick 中将 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,生产服务器是物理服务器。

我在 Internet 上找到的文档非常少。几个月前这里只有一个线程:http: //sourceforge.net/mailarchive/forum.php ?thread_name=20110301013714.GC15521%40node99.net&forum_name=graphicsmagick-help

提到了同样的问题,但没有回复。

我想知道我是否可以在这里得到帮助。或者也许我错了,我应该选择 ImageMagick。

4

2 回答 2

0

我遇到了这个确切的问题。这似乎是graphicsmagick的限制。如果您使用 -debug all 开关,您将看到 psd 的解码器正在尝试分配比每个进程可用的内存更多的内存。

例如,我有一个 6MB 的 psd,我想把它翻成 jpg。GM 无法做到这一点,因为它试图一次将其全部充气,并且需要 64GB 的内存(这是在我的开发机器上,只有 8GB)。

我在 imagemagick 上运行了相同的命令,它没有问题(在我的开发机器上)

于 2013-09-20T17:21:48.317 回答
0

生产服务器的每个进程的内存限制可能低于您的暂存 VM。也就是说,限制可能是由软件而不是实际硬件强加的。

限制可以是每个用户(或者更确切地说是每个用户类)以及系统范围(使用 sysctl)。尝试运行

% sysctl -Aa|fgrep kern.max

并比较两台服务器之间的输出(kern.maxdsiz 和 kern.maxssiz 特别感兴趣)。此外,尝试简单地以网络服务器用户身份运行限制:

% su          # become root
% su -m www   # become www
% limits

并再次比较输出。

最后,您的生产服务器是否只是在使用更多内存(用于其他事情,例如提供其他内容),而登台系统仅处理单个文件转换,因此没有达到限制?

于 2013-04-10T22:56:30.490 回答