setInterval jsf2.0 glassfish v3 и утечки памяти - PullRequest
0 голосов
/ 19 сентября 2010

ребята, я новичок и я не англичанин.У меня проблема с использованием js setInterval, который имитирует щелчок пользователя каждые X секунд на кнопке отправки.На странице есть только одна h: form и h: commandButton.Я использую профилировщик, и я вижу, что java.util.HashMap постоянно увеличивают его размер.Через несколько часов размер используемой кучи значительно увеличится относительно начальной точки.

Пожалуйста, помогите мне, эта проблема сводит меня с ума.

Это код:

<?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, но у меня есть heapDump, сгенерированный glassfish. Это скриншот, но я не могу его опубликовать, потому что моя репутация слишком низкая.однако java.lang.Object [] потребляет 20% кучи, java.util.HashMap $ Entry [] 18% и HashMap 10% Есть идеи?

Обновление : Привет, ребята, я решил свою проблему и обнаружил ошибку в зависимости / внедрении CDI.Я решил проблему, изменив аннотацию @Named с @ManagedBean, и это решило мою проблему.В примере я пропустил код, потому что я думаю, что CDI не содержит ошибок.Очевидно, что Бин, аннотированный @Named, имеет запрос Scoped, в то время как Бин ApplicationScoped не выдает ошибку.Я относительно новичок в CDI, так где я должен сообщить об ошибке?

1 Ответ

0 голосов
/ 19 сентября 2010

Через несколько часов размер используемой кучи значительно увеличится относительно начальной точки.

Ok. Но какое использование памяти вы получаете после сборки мусора (GC)? Я предлагаю включить ведение журнала GC (-Xloggc:file.log) и, возможно, опубликовать график результатов здесь. Также убедитесь, что вы используете последнюю версию GlassFish (3.0.1).

...