服务在OpenShift Enterprise 2.0中加载时暂时不可用

时间:2014-03-25 20:01:15

标签: apache openshift

使用OpenShift Enterprise 2.0,我有一个简单的jbossews(tomcat7)+ mysql 5.1应用程序,它使用连接到mysql数据库的JSP文件。该应用程序是作为非缩放应用程序创建的(fwiw在启用缩放时会发生同样的问题)。

使用只有一个并发用户且没有思考时间的JMeter驱动程序,它将会持续大约2分钟(大约200 req / sec),然后它将开始批量返回“503 Service Temporarily Unavailable”(a一次几秒钟)开启和关闭剩余的测试。即使我没有改变任何东西(不要重新启动应用程序),如果我等待片刻然后再试一次,它会做同样的事情 - 首先看起来很好,但是它会从错误开始。

齿轮远没有完全利用(内存/ CPU),我能找到的唯一一个显示问题的日志是/ var / log / httpd / error_log,它填满了这些条目:

[Tue Mar 25 15:51:13 2014] [error] (99)Cannot assign requested address: proxy: HTTP: attempt to connect to 127.8.162.129:8080 (*) failed

在错误开始发生时查看节点主机上的“top”命令,我看到几个httpd进程在顶部开启和关闭。

所以看起来我在某种程度上耗尽了代理连接或类似的东西。但是,我不确定只有一个并发用户会如何发生这种情况。有关如何解决此问题的任何想法?我找不到任何类似的帖子。

2 个答案:

答案 0 :(得分:1)

核心问题是由于连接卡在TIME_WAIT中,系统正在耗尽短暂的端口。检查使用:

netstat -pan --tcp | less

netstat -pan --tcp | grep -c ".*TIME_WAIT"

只计算时间等待状态下的连接数。

这些是由节点端口代理(httpd)与tomcat后端建立的连接。有几种方法可以更改TCP设置以减少问题。第一次尝试是启用重用。将以下内容附加到/etc/sysctl.conf:

# allow reuse of time_wait connections
net.ipv4.tcp_tw_reuse=1

如果没有可用的临时端口,这将允许重用TIME_WAIT状态的连接。

但是,问题主要在于这些连接没有正确汇集。我不会在具有相同应用程序+驱动程序的装备之外遇到此问题 - 这意味着连接已正确合并,并且根本不必处于TIME_WAIT状态。代理中的某些内容必须干扰连接关闭。

看起来没有为连接池/ keepalive配置mod_proxy / mod_rewrite,或者它们与它不兼容。

答案 1 :(得分:0)

如果你遇到这个问题,你应该首先尝试转移到vhost路由,但如果vhost连接仍然很高,你仍然用完了端口,那么tcp tw重用可以提供帮助。

https://access.redhat.com/articles/1203843也有很多关于这个主题的好信息。