我正在 Ubuntu 系统上通过 Passenger 和 nginx(利用在同一台机器上运行的 elastic-search 服务器)部署 rails 应用程序。这可以完美运行大约十二个小时。然后,服务器唯一的响应是 503 消息。重新启动 nginx 可以解决问题。
我已经查看了大量 rails/nginx/elasticsearch 日志,但找不到有关此“崩溃”的任何线索。只有一些通用的路由错误可见。
还有其他地方我可以检查吗?如何有效地调试此行为?
答案1
503 表示服务不可用,一般是服务器维护或者超载无法响应。
假设与部署相关的所有软件包都已更新,并且没有尝试进行外部 (d)DoS 攻击,那么 app/elasticsearch 是否会在外部建立许多连接?尝试查看 netstat。
答案2
经过进一步调查,我解决了这个问题。运行一段时间后,elasticsearch 占用了所有 CPU 时间,没有 CPU 时间留给 nginx/passenger。当那里堆积了足够多的请求时,nginx 就会死机。
所以问题出在 elasticsearch 上。我尝试了多种配置,但似乎都没有任何改变。
按照此处帖子中的建议http://elasticsearch-users.115913.n3.nabble.com/,我尝试在 Oracle JVM 而不是 OpenJDK 上运行 Elasticsearch。这很管用。从那时起,系统就稳定了。