node.js - Express.js Web 服务器在内存耗尽之前在生产环境中持续 5 分钟

标签 node.js coffeescript express

所以我已经有了一个 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/

相关文章:

javascript - 我如何使用 React 获取 cookie 数据?

node.js - Yeoman 生成器错误 : Upstream proxy port is required

javascript - express-jwt-blacklist 抛出错误,如错误 : JWT missing tokenId claimsub in my code

javascript - 谷歌地图 : asynchronous loading with coffeescript

javascript - 如何使用 javascript 返回一组数据属性?

javascript - Backbone.js:包含多个具有相同 ID 的模型的集合

javascript - Node 将 HTML 表达为 PDF

JSON 对象未定义 (Nodejs)

angularjs - 表达 res.json() 到 Angular $http.get() 格式问题

node.js - 如何使用 node-couchdb-api 使用全有或全无选项进行批量保存