Play Framework变得反应迟钝? (可能是内存问题)

时间:2013-03-04 07:19:01

标签: playframework-1.x

我们有一个Play 1.2.5应用程序,我们遇到了一些应用程序没有响应的问题。

为应用程序设置了适当的内存设置后问题没有再发生(几天ATM),但我想知道实际原因以及是否有某种方法可以在日志中看到它。

在我们的设置中,我们得到了

  • 在AWS上运行1.2.5应用程序(Ubuntu 12.04)
  • MySQL RDS数据库
  • Apache服务器作为代理(处理SSL等)。

这种情况发生在各种调用中,但我有一个使用简单的 renderText -implementation(仅200&“OK”)监视healthcheck的示例。我们经常有这些“时不时”。应用程序在没有启动的情况下返回响应。

Apache访问日志有:

  (IP addr) - - [01/Mar/2013:09:31:16 +0200] "GET /monitor/healthcheck HTTP/1.1" 502 4305 "-" "NING/1.0"

Apache错误日志有:

  [Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] (70007)The timeout specified has expired: proxy: error reading status line from remote server localhost:8080
  [Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] proxy: Error reading from remote server returned by /monitor/healthcheck

(Apache有300s = 5m代理超时长度)

播放日志中没有任何内容(我们在控制器上记录了请求URL,因此至少请求没有找到它在那里或者日志记录有问题)

首先想到的是线程耗尽。这对我来说似乎不太可能,因为:

  • 我们正在开发中 - >相当低的流量
    • 在日志没有几个小时的先前流量的情况下也会发生这种情况
  • 我们有10个帖子(play.pool=10
  • 我们没有使用异步WS调用(Play 1.2.X似乎有些错误)
  • 长时间不接听电话
  • 使用variuos后进行随机测试似乎没有线程悬挂(用jstack检查一切似乎都没问题)

(也许是相关的,也许不是):有一次我们检查了jstack,以便它没有回应一个cacll:

$ jstack 7842
7842: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

然而,在尝试-F之前,我们再次尝试并得到了正确的响应,因此如果JVM处于某种无响应的状态,它很快就会成功。

在一些帮助下,我们设置了适当的内存设置,从那以后(2013-03-01上周五)我们没有遇到这个问题。

jvm.memory=-Xms64m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m

但是,我们没有在日志中打印任何内存问题。我仍然有点担心,因为我对实际原因一无所知,所以:

  • 可能是什么原因
    • 一些内存问题,为什么在日志中找不到?
    • 一些(不确定的)会让线程长时间被阻止的事情
  • 如果再次发生这种情况,有没有办法在日志中查看原因?
    • 在日志中出现内存问题需要一些设置吗?

更新:似乎可能是MySQL连接测试挂起的问题。创建another more focused question并尝试记住在问题解决后也更新此内容。

1 个答案:

答案 0 :(得分:0)

原因是与RDS MySQL的TCP连接时不时地变得陈旧 - > c3p0连接pooler管理员线程都被卡住进行连接测试 - >播放请求线程最终等待JPAPlugin.beforeInvocation以获得数据库连接。

查看更集中的问题Connection hanging occasionally with Amazon RDS MySQL & Play Framework 1.2.5 (c3p0 default settings)了解更多细节。