0

みんな私は新しく、英語ではありません。送信ボタンでX秒ごとにユーザーのクリックをシミュレートするjs setIntervalの使用に問題があります。このページには、h:form と h:commandButton が 1 つだけあります。プロファイラーを使用すると、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 だけを使用していますが、glassfish によって生成された heapDump があります。これはスクリーンショットですが、評判が低すぎるため投稿できません。ただし、java.lang.Object[] はヒープの 20%、java.util.HashMap$Entry[]18%、HashMap 10% を消費します。

更新: こんにちは、皆さん、問題を解決し、CDI 依存関係/インジェクションのバグを発見しました。@ManagedBean でアノテーション @Named を変更する問題を解決しました。これで問題が解決しました。この例では、CDI にはバグがないと思われるため、コードを省略しました。明らかに、@Named で注釈が付けられた Bean はリクエスト スコープを持ちますが、ApplicationScoped Bean はバグを生成しません。私は CDI に比較的慣れていないので、どこにバグを報告する必要がありますか?

4

1 に答える 1

0

数時間後、使用されるヒープ サイズは、開始点を基準にして大きくなります。

Ok。しかし、ガベージ コレクション (GC) の後、メモリ使用量はどれくらいになるでしょうか? GC ログ ( -Xloggc:file.log) を有効にして、結果のグラフをここに投稿することをお勧めします。また、最新バージョンの GlassFish (3.0.1) を使用していることを確認してください。

于 2010-09-19T15:15:53.353 に答える