10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JSF2.2における@ViewScope及び@SessionScopeにおけるメモリリーク問題(未解決)

Last updated at Posted at 2014-07-14

概要

JSF2.2で提供される機能のうち、@ViewScope@SessionScopeは非常に便利な機能です。
但し、残念なことにこの機能はメモリリークする問題が含まれているようです。
(@FlowScope@ConversionScope`でも発生しそうな感じですが、私は検証していません)

そのため、GlassFish4.0を起動し続けていると徐々にメモリが逼迫してしまい最終的にはOutOfMemoryでアプリケーションの応答しなくなります。

関連チケット

具体的なチケットとしては、JAVASERVERFACES-3194でJIRAにチケットが切られています。

Macadoshisさんが以下の様にコメントされていますが、まさに私も同様の現象が発生していました。

My jmeter tests simulating hundred of parallel users kill my available heap size very quickly

ただ、このチケットは色々迷走しているようで、closeされているのに2.2.7のリリースに含まれていなかったり、修正されていなくてReOpenされたりしています。最終的には6/25にfixされている状態です。

再現確認

このメモリリーク問題はJConsoleなどで簡単に確認する事が可能です。
(私はプロジェクト終盤の負荷テスト中に見つけましたがorz...)

memory-leakというシンプルなプロジェクトを作成して確認してみました。
このプロジェクトでは@ViewScopeでのメモリリークを調査しています。

  1. アプリを起動して再表示を何回かするとViewScopeで管理されているクラスが積み上がっていくことを確認。
  2. FullGCを実行しても解放されないことを確認
  3. 別画面へ遷移しても破棄されない事を確認
  4. FullGCを実行しても破棄されない事を確認

leak.png

※Productクラスがいつメモリから解放されるかプロファイルしています

実は13:20:10辺りでFulGCをかけているのですが、全くメモリから解放されません。
また、別画面に遷移してみてもやはり解放されません。

そして解決?

rev13386で再修正したものがコミットされ、2.2.8でリリースされるようなので、最新をビルドして試してみようと思います。

おまけ

当初自分の実装の仕方や確認方法が悪いのでは..?と疑いました(今も疑っています)。
もし正しい実装方法があればご指摘いただきたいです。

参考サイト

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?