JBoss で非常に奇妙な動作をしています。SO Crowd の集合的な知恵を利用したいと思います。
SOAP呼び出しを処理するためにJBoss(4.0.4だと思います)を使用しています。実際、これは栄光の RPC サーバーとして使用されており、それ以上のものではありません。20 以上のクライアントが同時にリクエストを送信すると、メモリが不足します。要求は、かなり小さな着信要求 (適切な SOAP) と、基本的に 1 つの長い SOAP 文字列 (文字列の内容は XML) である戻り結果パケットで構成されます。はい、これは最適ではないことを認識しています。聞かないでください。
400 万のオブジェクト (文字列と整数) を保持する org.jboss.axis.message.SAX2EventRecorder のインスタンスへのリークを追跡しました。現在、最長の応答でさえ 4MB のデータを伝送しません。要求はすべて 40K 未満です。何か怪しいところがありますが、Web でドキュメントが見つかりません。
レコーダーの用途を誰か教えてください。どうすればそれを取り除くことができますか?または、メモリをあまり消費しないように構成できますか? どんな助けでも大歓迎です。
更新: 明確にするために、メモリ ダンプを実行しました。ダンプには、配列または 4,000,000 以上のオブジェクト、文字列、および整数が表示されます。配列は org.jboss.axis.message.SAX2EventRecorder によって所有され、次の担当者によって保持されます。
org.jboss.axis.message.SOAPEnvelopeAxisImpl@0x19c31fd8 (141 バイト): フィールドレコーダー org.jboss.axis.message.RPCParamElementImpl@0x19c32260 (123 バイト): フィールドレコーダー) : フィールドレコーダー org.jboss.axis.message.RPCElement@0x19c321e0 (124 バイト) : フィールドレコーダー org.jboss.axis.encoding.DeserializationContextImpl@0x19c332f0 (67 バイト) : フィールドレコーダー org.jboss.axis.message.SAX2EventRecorder$ objArrayVector@0x19c33398 (24 バイト) : フィールド this$0
私たち自身のアプリのデータ構造はかなり肥大化していますが、この程度ではありません。
別の更新: 「解決策となる力」を見つけた力: 64 ビット メモリに切り替えています。万歳。