Axis2のスタブを使った呼び出しでの解放漏れ
Webサービスから、別のWebサービスを呼び出す処理があり、そこでAxis2で自動生成できるスタブを使って、別のWebサービスの呼び出しを行っていた。
性能測定作業でこのWebサービスを繰り返し実行したところ、スローダウンが発生した。Java/tomcatを再起動すると元に戻るのだが、何回も呼び出しているうちに処理が遅くなってくる。
そういえば、スタブを使った呼び出しで特に資源の解放処理みたいなことはやっていないなと気になって、スタブのソースを見てみるとcleanup()というメソッドがあった。
「Axis2 cleanup」で検索すると以下のようなページにたどり着いた。
- はてなブックマーク - AXIS2-4007
http://b.hatena.ne.jp/entry/s/issues.apache.org/jira/browse/AXIS2-4007 - [#AXIS2-4007] Axis2 1.4.1 client stub not freed - ASF JIRA
https://issues.apache.org/jira/browse/AXIS2-4007
上記を参考にスタブでの呼び出し処理に以下の解放処理を追加。そうしたらスローダウンは発生しなくなったようだ。(以下だけでは完璧ではないというコメントもあり)
stub._getServiceClient().cleanup();
stub.cleanup();