这个问题并不经常发生,但它仍然存在,我不知道从哪里开始。我已经为 /var/log/ 中的杂种 PID 进行了搜索,包含它们的唯一消息是:
Jun 7 07:46:24 staging kernel: 4gb seg fixup, process mongrel_rails (pid 29498), cs:ip 73:00937a5c
它与 Xen 的特定版本有关libc
,但并不重要,并且进程仍在运行,这些消息累积在kern.log
实际上,我不仅在寻找特定的解决方案(可能无法从上述描述中提供),而且还在寻找有关如何设置监控或调查此类案例的任何建议。
我们使用nagios来监控我们的 mongrel(以及数百个其他服务)。
它只是检查以确保在每个所需端口上运行着 mongrel 进程。如果没有,它会重新启动它们。
当 xen domU 中未安装 libc6-xen 时,我收到了这些消息。因此,请验证您是否安装了该软件包...
当使用 libc 的另一个变体时,它仍然可以工作,但它会变慢,因为内核必须捕获错误的操作并做正确的事情。引用的消息正是在这种情况下由内核生成的。
所以你猜对了,这并不能解释为什么 mongrel 会停止。检查 mongrel 的文档以启用调试日志(如果有)。否则,您总是可以尝试跟踪该过程,直到它失败......日志的末尾会给您提示它是如何失败的,也许您会找到原因。
你可能会看上帝来监控和管理你的杂种。它非常灵活,您可以使用它根据某些阈值(例如内存量、CPU 使用率、抖动等)重新启动。你也可以考虑monit,我知道有人用它来代替上帝。
不完全是一个答案,但你必须使用 mongrel 吗?我切换到 apache + 乘客,再也没有回头。