【问题标题】:BlazeDS and ColdFusion - jRun memory usage increase resulting in java.lang.OutOfMemoryError: Java heap spaceBlazeDS 和 ColdFusion - jRun 内存使用量增加导致 java.lang.OutOfMemoryError: Java heap space
【发布时间】:2010-12-08 15:41:23
【问题描述】:

我在 Coldfusion 8 的实例中运行 BlazeDS。一个灵活的聊天应用程序,它同时充当生产者和消费者,允许 70 个长轮询请求,以 2 秒的轮询间隔移动到客户端轮询。 jRun 指标日志记录已启用。服务器设置为最大堆大小为 1200mb、最大 210 个 jrun 线程和最大 150 个同时闪存远程处理请求。

所有人似乎都在巡航数小时,与以下 JRun 统计数据相差不大。

正在运行的线程数、可用线程数、Jrun 会话数、总已用内存 MB、可用内存 MB
71,101, 148, 332.864, 34.866

然后突然之间,可能在几个小时内,内存慢慢增加,有时我会遇到 java.lang.OutOfMemoryError: Java heap space exception。内存正在使用但未释放,我最终得到了大致附加的指标数据。

正在运行的线程数、可用线程数、Jrun 会话数、总已用内存 MB、可用内存 MB
71、130、195、1015.424、249.94

Coldfusion 监视器没有显示任何异常的内存使用情况,也没有抛出任何应用程序异常。

我可以在 system.out 日志中看到许多以下错误,但不确定它们是否相关。我找不到任何与 BlazeDS 相关的信息。

java.lang.IllegalStateException: Session is invalid
at jrun.servlet.session.JRunSession.checkSessionValidity(JRunSession.java:394)

有时内存运行非常高,但没有抛出内存不足错误,然后,随着活动安静下来,内存被释放,但可用内存可以在 20 秒内从 480mb 变为 800mb。内存中没有逐渐释放。

以前有没有人遇到过这样的事情?

我的服务-config.xml

<properties>  
  <polling-enabled>true</polling-enabled>  
  <polling-interval-millis>2000</polling-interval-millis>
  <wait-interval-millis>60000</wait-interval-millis>  
  <client-wait-interval-millis>1</client-wait-interval-millis>  
  <max-waiting-poll-requests>70</max-waiting-poll-requests> 
</properties>

【问题讨论】:

    标签: java memory coldfusion blazeds jrun


    【解决方案1】:

    您最好的方法是标准的 Java OutOfMemoryError 分析:

    • -XX:+HeapDumpOnOutOfMemoryError 添加到您的JVM 启动参数中
    • 注意错误情况,它将在TOMCAT_HOME 中创建一个二进制头转储文件
    • 使用分析器分析堆转储文件,如 Eclipse 项目的Memory Analyzer (MAT)

    这将告诉您哪些对象正在占用您所有的内存。我认为现在关注java.lang.IllegalStateException 还为时过早。当 JVM 内存不足时,所有的赌注都没有了——可能会看到各种错误消息。

    顺便说一句:您的会话超时政策是什么?

    【讨论】:

    • 嗨,谢谢。 ColdFusion8\wwwroot\WEB-INF\web.xml 中的会话超时设置为 30 分钟。没有设置 Coldfusion 请求超时,我们允许 BlazeDS 长轮询请求。以下是 BlazeDS services-config.xml 中的设置: true200060000 170属性>
    • 那里没什么异常。使用我上面描述的步骤来找出是什么占用了你的记忆。
    • 谢谢 Stu,在运行 IIS 的 ColdFusion 配置下将在哪里创建转储?您在上面提到了 TOMCAT_HOME,但此处不适用。干杯。
    • 哦,天哪。好的...在我收集的配置中,Java 正在其他地方运行。我对 BlazeDS 的体验仅限于 Tomcat 安装,它只是我自己的 webapp 中的几个配置文件和库。在你的情况下,我什至不知道从哪里开始。而且我已经有将近 6 年没有接触过 IIS 了。而且我非常不熟悉ColdFusion。让我谷歌一下,问一些人这是怎么做到的。我有点困惑,真的很想知道这实际上是如何工作的。
    • 很久才回到这个问题,但它又出现了,所以我想我会添加评论。这次我使用 VisualVM 来分析 JVM 并进行堆转储,然后对其进行分析。迟来的感谢 Stu 的初步建议。
    猜你喜欢
    • 2013-06-06
    • 2011-10-07
    • 1970-01-01
    • 2012-08-03
    • 2020-11-30
    • 2013-02-25
    • 2016-04-15
    • 2018-06-15
    • 2013-05-18
    相关资源
    最近更新 更多