2010-09-19 56 views
0

球员我是新来的,我不是英语。 我有一个使用js setInterval的问题,它可以模拟用户每隔X秒按下一次提交按钮。 在页面中只有一个h:form和h:commandButton。 我使用探查器,我发现java.util.HashMap连续增加它的大小。 几个小时后,使用堆的大小增长很多尊重的起点。setInterval jsf2.0 glassfish v3和内存泄漏

请帮助我,这个问题让我发疯。

这是代码:

<?xml version = "1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html"> 
    <h:head> 
     <script type="text/javascript"> 
      var timeoutId = window.setInterval("userClick()" , 1000); 
     </script> 
    </h:head> 
    <h:body> 
    <h:panelGroup id="testo">test</h:panelGroup> 
    <h:form prependId="false" > 
     <h:commandButton id="buttonId" 
         action="null" 
         value="Invia"> 
      <f:ajax event="click" execute="@form" render=":testo"/> 
     </h:commandButton> 
    </h:form> 
    <script type="text/javascript"> 
    function userClick() 
    { 
     document.getElementById('buttonId').click(); 
    } 
    </script> 
    </h:body> 
</html> 

更新:又1天后的应用程序崩溃。 现在我只使用setInterval,但我有glassfish生成的heapDump,这是截图,但我无法发布它,因为我的声誉太低。然而,java.lang.Object []消耗堆的20%,java.util.HashMap $ Entry [] 18%和HashMap 10% 任何想法?

更新: 嗨,大家好我已经解决我的问题,并已发现在CDI依赖/注入的错误。 我已经解决了我的问题,使用@ManagedBean更改Annotation @Named,这解决了我的问题。 在这个例子中,我省略了代码,因为我认为CDI没有bug。 显然,使用@Named注解的Bean具有请求作用域,而ApplicationScoped Bean不会产生该错误。 我对CDI比较新,所以我必须报告错误?

+0

请复制并粘贴'setInterval'调用和它正在运行的代码。 – 2010-09-19 14:21:54

+0

这会每秒向服务器发送一个请求,因此您可能需要查看处理请求的方式。您可能还想调高间隔计时器,1秒很短,因为往返时间可能会比此更长。 – BGerrissen 2010-09-19 15:20:33

+0

如果我增加间隔内存增长缓慢,但几天后服务器崩溃outOfMemory.Betaly网页必须在浏览器中打开。 – 2010-09-19 15:42:59

回答

0

几个小时后,使用堆的大小增长了许多尊重的起点。

好的。但是垃圾收集(GC)之后你会得到什么内存使用?我建议打开GC日志记录(-Xloggc:file.log),也许在这里张贴一些结果图。另外请确保您使用的是最新版本的GlassFish(3.0.1)。

+0

因此,如果没有setInterval,HasMap使用的内存每增加40个字节10秒,而使用setInterval内存增加约2Kb每10秒。 – 2010-09-19 15:41:28

+0

@ user451960问题并非真的是'setInterval',问题是当执行每秒触发的特定请求时服务器端实际发生的问题。 – 2010-09-19 15:46:42

+0

然而,我正在做一个简单的聊天应用程序,我使用Primefaces p:poll(它使用setInterval)来更新数据。当我测试应用程序时,用户在几个小时后崩溃了outOfMemory中的应用程序。所以,如果不改变代码,我已经使用Icefaces推送几乎setInterval。现在应用程序不会崩溃。所以我确定setInterval是问题。 – 2010-09-19 16:21:40