BlazeDS和ColdFusion - jRun内存使用量增加导致java.lang.OutOfMemoryError:Java堆空间

时间:2009-10-21 09:28:14

标签: java memory coldfusion blazeds jrun

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

所有这些都可能看起来像是在跟踪JRun统计数据并没有太大偏差的几个小时。

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

然后突然间,在几个小时的时间内内存缓慢增加,我有时会得到一个java.lang.OutOfMemoryError:Java堆空间异常。内存正在使用但尚未发布,我最终得到了大致附加的度量数据。

正在运行的线程,可用线程,Jrun会话,已用总Mem 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。内存中没有逐渐释放。

以前有人遇到这样的事吗?

我的services-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>

1 个答案:

答案 0 :(得分:3)

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

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

这将告诉你哪些物体正在吸收你所有的记忆。我认为现在关注java.lang.IllegalStateException为时尚早。当JVM内存不足时,所有的赌注都会关闭 - 可以看到各种错误消息。

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