10

正在对我的 1 heroku dyno 和 dev 数据库进行一些拉伸(ab)测试,连接数限制为 20。

在调用期间(使用 squeryl 访问数据库的堆分配正在增加,导致 R14(内存超过 512MB))

我似乎无法重现该问题(至少在该级别上)。

有没有办法让heroku堆转储并分析它以获得一些线索?

play2、scala、squeryl 和 heroku 内存泄漏是否存在任何已知问题?

更新

如果我在控制器末尾执行 System.gc,一切似乎都很好,而且速度较慢...我在该调用中创建了很多对象,但 heroku 的 JVM 不应该处理 gc 吗?另外,如果我定期安排 gc 调用,请不要释放内存

4

2 回答 2

5

有一篇很棒的文章可以解决 Heroku 上的内存问题: https ://devcenter.heroku.com/articles/java-memory-issues

在您的情况下,您可以将 GC 标志添加到 JAVA_OPTS 以查看内存详细信息。我建议以下标志:

heroku config:add JAVA_OPTS="-Xmx384m -Xss512k -XX:+UseCompressedOops -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps"

如果您想从 JMX 获得更多关于您的内存的信息,还可以将其添加到您的进程中,还有一个简单的 java 代理。如果您想更深入地了解,您还可以查看像 New Relic 这样的监控插件,但我认为您应该对标志和 java 代理没问题。

于 2013-02-26T20:52:11.793 回答
0

我也有这个问题,在这里回答了。

我遇到过同样的问题。Heroku 告诉您机器内存不足,而不是 Java VM。Heroku Play 2.2 部署实际上有一个 bug,启动脚本读取的是 java_opts,而不是 JAVA_OPTS。

我通过设置两者来修复它:

heroku config:add java_opts='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops'
heroku config:add JAVA_OPTS='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops'

我还必须设置 -Xms 否则我得到一个错误,说最小值和最大值不兼容。我猜 Play2.2 使用的默认值高于 384m。

于 2014-04-29T02:19:37.110 回答