[tips][Java]CodeCache領域使用状況の確認方法 | 您所在的位置:网站首页 › codecache配置 › [tips][Java]CodeCache領域使用状況の確認方法 |
先日CodeCacheによる性能問題が発生した、原因を突き止めるには時間が掛かりました。 そのわけは 全体が遅いではなく、一部処理のみ遅い スレッドダンプから遅い箇所の特定が出来ない プロファイリングからホットメソットの特定が出来ない 性能劣化時間帯に同期化によるロック待ちが発生していない 性能劣化時間帯のシステムコールのコストは平常時と変わらない 性能劣化時間帯にメジャーGCが起きていない、マイナーGCの時間も正常数値範囲ないであるよく言われているJVM性能に影響する要素を一通り確認しても、問題の特出が出来なかった。 今回の障害ケースは以下のような特徴があります。 アプリケーションサーバ一定時間運転後、特定画面の処理時間が数十倍伸びる アプリケーション再デプロイ後、スローダウン現象が起きやすくなる傾向がある 一度性能劣化すると、アプリケーションサーバを再起動しないと回復しないこの現象はメモリリークによるGC時間が伸びるのような性能劣化ケースと似ている。 しかしGCによるスローダウンは波があるはず、かつ特定画面が遅いとは限らないでしょう。 つまり、CodeCacheによる性能劣化は原因を気づきにくい場合があります。 最終的Flight RecorderのJITコンパイラー記録から問題がCodeCacheにあることを推測した。 OpenJDKご使用の場合 -XX:+PrintCompilation JVM起動フラグでJITコンパイルログから同 じことも確認できる。 スローダウン前に取れた記録
性能劣化時間帯で取れた記録
ご覧の通り、性能劣化時間帯にJITコンパイラーが動いていないようだ。 CodeCache領域の使用量を確認すると、空きがないことも確認されました。 ここで問題はCodeCacheが足りないと推測出来るでしょう。ただ単に推測に過ぎないので、 根拠付けるためにテスト用アプリケーションをデプロイしてJITコンパイラーの挙動を確認しました。 やはりJITコンパイラーが動いていないのだ。 |
CopyRight 2018-2019 实验室设备网 版权所有 |