2011-07-07 22 views
2

因此,我已经安装了Express.js服务器,但生产后大约5分钟后 - http://balupton.com - 它崩溃并重新启动。Express.js网络服务器在内存耗尽之前会持续5分钟

我的网站的源代码是在这里:https://github.com/balupton/balupton.docpad/blob/master/server.coffee

的docpad参考,使用它来创建服务器是在这里: https://github.com/bevry/docpad/blob/master/lib/docpad.coffee#L589

它托管在http://no.de这里是内存溢出异常,保持出现在每5分钟左右的日志:

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory 
[ Jul 7 14:02:13 Stopping because all processes in service exited. ] 
[ Jul 7 14:02:13 Executing stop method (:kill). ] 
[ Jul 7 14:02:13 Executing start method ("env `cat /home/node/node-service/profile` /opt/nodejs/latest/bin/node /home/node/node-service/releases/20110707135409/server.js &"). ] 
[ Jul 7 14:02:13 Method "start" exited with status 0. ] 
Express server listening on port 80 and directory /home/node/node-service/releases/20110707135409/out

我到处看着这个,但我已经放弃了。谁能帮我?

回答

9

问题原来是与中间件。持续使用静态中间件意味着当没有找到静态文件时,静态中间件会尝试将请求发送到下一个中​​间件 - 该中间件不存在,所以它只会保持请求永远打开 - 所以非常快速地打开连接(由于蜘蛛抓取不存在的网址),并且每次资源耗尽时都会使服务器崩溃。

解决的办法是增加一个404中间件作为最后的中间件,像这样运行:

# 404 Middleware 
myServerInstance.use (req,res,next) -> 
    res.send(404) 

这样,当静态中间件没有找到一个文件,它把它发送到下一个中​​间件,最终404中间件将被击中,并且发送404而不是永远保持请求打开。

相关问题