播放框架变得无响应? (可能是内存问题)

Posted

技术标签:

【中文标题】播放框架变得无响应? (可能是内存问题)【英文标题】:Play Framework becoming unresponsive? (Possibly memory issues) 【发布时间】:2013-03-04 07:19:00 【问题描述】:

我们有一个 Play 1.2.5 应用程序,但我们遇到了一些问题,该应用程序变得无响应。

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

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

播放在 AWS (Ubuntu 12.04) 上运行的 1.2.5 应用程序 mysql RDS 数据库 Apache 服务器充当代理(处理 SSL 等)。

这发生在各种调用中,但我有一个使用简单的 renderText 实现(只有 200 和“OK”)监控运行状况检查的示例。我们“时不时地”有这些。应用程序在未启动的情况下返回响应。

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 似乎有些错误) 长时间没有通话阻塞 经过各种使用后的随机测试,似乎没有线程挂起(用 jstack 检查一切似乎都正常)

(也许相关,也许不相关):有一次我们检查了 jstack,所以它没有响应 cacl:

$ 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 并会在问题解决后尝试记住更新此内容。

【问题讨论】:

你看过 JVM 和 JConsole 吗? 没有尝试过 JConsole(也许可以设置,应该检查一下)。无论如何,现在问题再次发生,我使用 -F 运行 jstack,问题似乎是 com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnectionNoQuery 内部阻塞了一堆线程。在我更彻底地检查后,我会在这里更新。 【参考方案1】:

原因是到 RDS MySQL 的 TCP 连接时不时地过时 -> c3p0 连接池管理线程都卡在进行连接测试 -> 播放请求线程最终在 JPAPlugin.beforeInvocation 处等待以获取数据库连接。

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

【讨论】:

以上是关于播放框架变得无响应? (可能是内存问题)的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 变得无响应

播放框架2:内存数据库中的h2 mysql兼容模式:转义字符

iOS - 内存警告会卸载 View Controller 并使应用程序无响应

flv直播流播放视频,websocket响应造成内存泄漏 浏览器崩溃

安卓手机system进程无响应怎么办

qt界面不动,但是响应事件