eclipse-jettyバージョン8.1.6を使用しているJava Webサーバーがあります。最近、私たちはメモリ不足エラーに気付き始めました。 アクティブなスレッド数のプロファイリングはほとんどありませんでした。これはおよそ100であるようです。プロセスには最大5GBのヒープメモリと4GBの初期ヒープメモリがあります。Javaで非ヒープ領域のメモリリークを見つけるには?
Process Details
Environment: Docker(kubernetes)
java.version="1.8.0_91"
java.vm.info="mixed mode"
java.vm.name="Java HotSpot(TM) 64-Bit Server VM"
thread size = 1024K
ulimit is unlimited for max process per user.
Container(Pod) Max memory is allocated to be 8GB
ウェブサーバーは1分間に平均350リクエストを受信します。また、ELB(kubernetes service)の背後にある多くのそのようなインスタンスを実行します。数時間走った後、我々はこのOOMに気付く。問題はランダムであり、ストレステストで発生します。
OOMのStackTrace:
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method) [na:1.8.0_91]
at java.lang.Thread.start(Thread.java:714) [na:1.8.0_91]
at org.eclipse.jetty.util.thread.QueuedThreadPool.startThread(QueuedThreadPool.java:441) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903]
at org.eclipse.jetty.util.thread.QueuedThreadPool.dispatch(QueuedThreadPool.java:366) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903]
スレッドカウントの数が合理的であるので。私はいくつかのメモリリークを疑う。しかし、私はドッカーのコンテナでオフヒープメモリサイズを見つけることができません。 これを見つける方法はありますか?
しばらく検索した後、私はこの不具合を突堤で見つけました。
桟橋をアップグレードせずに以下の問題が原因でバグが確認された場合はどうすれば確認できますか?
関連バグID:https://bugs.eclipse.org/bugs/show_bug.cgi?id=477817