3

Web アプリで非常に奇妙な状況が発生しています。Tomcat 6 を使用し、Web サービスは Jersey で実装されています。以下のサービス呼び出しは、JSON データを返すためのものです。

以下は、OOM 例外をスローします。

http://mywebservices/get/some/data/for/1
http://mywebservices/get/some/more/data/for/12345
http://mywebservices/get/some/other/data/for/abc

ただし、次の場合は正常に機能します。

http://mywebservices/get/some/data/for/12345
http://mywebservices/get/some/more/data/for/1

これらは、何が起こっているかを示すために作られた呼び出しです。JVM 用に最大 5 GB の使用可能なメモリを表示するリアルタイム監視サービスがあります。私たちは、Tomcat が私たちに投げかけている OOM は、偽の/間違った応答であると信じています。面白いことに、まったく異なる Web サービスでも、ブラウザーに表示されるスタック トレースは同じままです。Web サービス リクエストとはまったく関係のないトレースが表示されていることは間違いありません。そのため、実際にリークがあるかどうかを調べています。

それまでの間、誰かが以前にこれに遭遇したことがあるかどうかを知ることは素晴らしいことです.

ありがとう。

4

1 に答える 1

1

わかりました。この問題の根本的な原因を見つけたと思います。ObjectOutputStream と ObjectInputStream の使用により、確かにリークがありました。

現在、ObjectOutputStream には参照をクリアできる reset() メソッドがありますが、ObjectInputStream にはそのようなものはありません。

このリンクは私たちを助けました: シリアル化中に Java がヒープ領域を使い果たしました

于 2013-04-16T18:55:34.820 に答える