我有一个节点服务器(0.6.6),在 Ubuntu 11.04 机器上运行 Express 应用程序以及 Mongoose 和 s3。
每小时服务器都会挂起几次。这意味着应用程序运行良好,我看到了快速日志,然后服务器突然停止响应。没有错误,没有痕迹,没有日志,奇怪的是,即使在网络调试窗口中,浏览器也不会显示请求。从本地网络中的任何机器上,都是相同的行为。我重新启动服务器,几分钟后又恢复正常,然后又开始挂起,每次都是在做不同的事情。
亚马逊上相同 Ubuntu 版本上的相同应用程序运行良好,且从未挂起。
我知道这一切有点模糊,但我不知道从哪里开始。你们有人见过类似的东西吗?有什么想法吗?
答案1
因此,我发现有两个原因都可能导致所描述的行为。
通过管道传输到日志进程。在我的 upstart 脚本中,我写过这样一行代码,
exec su nodejs node /home/nodejs/server.js | /home/nodejs/logger.js
它会让 upstart 守护进程而不是服务器来监控日志进程。因此,崩溃的服务器不会被注意到,并且看起来好像停滞了。(相反,可以使用 <<< 从右向左进行管道传输)process.on('uncaughtException', ...)
会导致节点应用程序挂起。我认为我一直在使用的模块之一具有启用该事件的调试模式。