grails アプリケーションで Jasper Reports を使用しているときに、PDF を生成する際に重大なパフォーマンスの問題が発生しています。jasperService を呼び出しています。
def reportDef = jasperService.buildReportDefinition(parameter, LocaleContextHolder.getLocale(), [data: emptyData])
Jboss で数回実行すると、パフォーマンスは良好です。X 時間後、パフォーマンスは Jboss の開始後よりも 100 倍以上悪化しています... 1 ページの PDF を作成するための応答時間が 7 ~ 12 秒から数分に変化しています。時間の測定値を追加したので、パフォーマンスの遅れはこの呼び出しの範囲内にあると確信しています。レポート データはパラメーター内で渡されるため、データベース接続の問題も除外できます。
HEAP を分析しましたが、50% まで使用されており、PDF の作成中にあまり変化していません。全体的なメモリも完全には使用されていません。PermGen を分析しましたが、完全にはほど遠いです。
作成中、CPU は永続的に 100% になりますが、PDF の作成は CPU を大量に消費することを知っていれば問題ありません。他のプロセスが PDF の作成を妨げていないことを確認しました。1 つ目は、プロセスを数回再起動して違いを測定しないことです。そのため、外部割り込みを除外できます。2 つ目は、JBoss を再起動するとパフォーマンスが大幅に向上することです。
この事実から、PDF 作成スレッドの実行中にスレッド ダンプを分析することで、JBoss 自体の分析を開始しました。再起動後に低速でも高速でも、他に何も実行されていないことがわかります (スレッド ダンプ スレッドを除く)。いくつかのスレッドダンプで、Groovy がいくつかの AST 変換を行っていることがわかりますが、これは Groovy にとって奇妙ではありません...
今、私は絶望しています。HEAP/PermGen は問題ありません。CPU も問題ありません。Jasper Reports / Grails は一体何をしているのですか?
誰かが同様の経験をしたり、根本的な原因についての考えを持っているのではないでしょうか? Jasper Reports でクリーンアップする必要がある/すべきものはありますか?
編集: 私のさらなる分析は、JBoss 7.1.1 (最新の安定版) が根本的な原因であるという証明されていないが、特定の結果につながります。Tomcat にアプリをインストールした後、数日後もすべてがスムーズに実行されます。私はこれを開いたままにします。多分誰かが同じ経験をして、それを投稿したいと思っています...? それ以外の場合は、このソリューションで閉じます。Jboss または 7.2/7.3 の以前のバージョンでアプリをテストする可能性があります。