ImageMagick 遇到 spawn Unknown system errno 12
发布于 3年前 作者 xiaojue 1517 次浏览

ImageMagick 遇到 spawn Unknown system errno 12 的问题。是代码的问题还是ImageMagick的问题呢?用的node-ImageMagick。开始程序木问题,跑了一阵以后出现的,裁切图片调用ImageMagick报内存溢出了。。why?

莫非我逻辑写的有问题= =?有同学遇到过的吗。

15 回复

我就是在forEach里用了个resize。。。= =

目测可能是我把ImageMagick处理的函数在每个app.get的handle里都定义了?

我已经把处理图片的部分单独提出来放在外面了。。观察下是否还会有泄露问题。

forEach 里 ImageMagick 一下子开得太多了吧?

ImageMagick 的 resize 操作还是比较费资源的,排成队列一个个处理可能会比较好

@XiongLiding 但是我用的是异步的调用方法呀。。= = 没用同步的啊。。

上代码吧, 或者贴 Gist 的链接

用forEachLimit试一下不救就知道了?

@xiaojue 每个异步调用都相当于执行了 imageMagick 的 convert 命令,会开启一个新的进程,用循环异步操作相当于一下子执行了很多个 convert 命令,同时开了很多个子进程

@XiongLiding soga,这条信息很及时,我知道问题了。

明天整理上,我觉得也得上代码了。

今天发现又出错了。

Express 500 Error: spawn Unknown system errno 12 at errnoException (child_process.js:481:11) at ChildProcess.spawn (child_process.js:444:11) at Object.spawn (child_process.js:342:9) at exec2 (/home/tuer/node_modules/imagemagick/imagemagick.js:22:25) at Object.convert (/home/tuer/node_modules/imagemagick/imagemagick.js:189:10) at /home/tuer/node_modules/imagemagick/imagemagick.js:194:22 at Object.resize (/home/tuer/node_modules/imagemagick/imagemagick.js:207:10) at /home/tuer/lib/util.js:163:16 at Array.forEach (native) at /home/tuer/lib/util.js:155:11

看来还是有内存溢出的问题。

嗯 我明天改成forEachLimit试一试。

有种猜测,foreach的时候开了多个convert,中途又有意外中断了进程,可并没有kill掉。。

去看了源码,不知道是否这种情况导致,明天写单独的例子测试吧。

楼主:我可以给你提几个建议吗? 一:expressjs 本身已经是WEB server,你根本不需要nginx 二:居然你的前端是有jquery库加载了,就没必要seajs 三:文件(图片)上传(包括市场缩略图)的功能,node.js现在也有很多成熟插件了. 上传文件就直接用那expressjs自带的就行了:http://cnodejs.org/topic/4f40a4dc0feaaa4424081758 缩略图的模块:https://github.com/joyent/node/wiki/modules#wiki-graphics

啊。。。

1,确实expressjs本身就是web server了。但是node的端口和我服务器上其他占用80端口的服务冲突呀。。。所以,我就用nginx给代理了,并且在nginx里设置一些规则,也挺方便,还有指定静态资源,也很方便,承载性也比node的要好些。

2,seajs和jquery没啥冲突的啊。。我是在用seajs加载的我每个page的conf。和jquery没啥关系。。我也没有把jquery写成模块,因为我可能有时候需要在页面里写些js。

3,文件上传我用的就是express自带的咯,imageMagick难道不是wiki-graphics里的模块么…… 我就是参照的这个wiki的~其他更好的模块还有一个node-canvas,我也在用~

感谢你的回复啊!~

回到顶部