所以我已经有了一个 Express.js 服务器设置,但在生产大约 5 分钟后 - http://balupton.com - 它崩溃并重新启动。
我的网站源代码在这里: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
我到处都在寻找这个,但我已经放弃了。谁能帮我吗?
最佳答案
问题出在中间件上。最后使用静态中间件意味着当找不到静态文件时,静态中间件将尝试将请求发送到下一个中间件 - 下一个中间件不存在,因此它只会使请求永远保持打开状态 - 因此非常快地打开连接开始堆积(由于蜘蛛爬行不存在的网址)并且每次资源耗尽时服务器都会崩溃。
解决方案是添加一个 404 中间件作为最后一个运行的中间件,如下所示:
# 404 Middleware
myServerInstance.use (req,res,next) ->
res.send(404)
这样,当静态中间件找不到文件时,它会将其发送到下一个中间件,最终会遇到 404 中间件,并发送 404,而不是永远保持请求打开。
关于node.js - Express.js Web 服务器在内存耗尽之前在生产环境中持续 5 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6611934/