PostgreSQLとTomcat周り。負荷をかけてもCPU使用率が上がらないとのこと。何のことは無い、デバッグログ出しすぎが原因。ログを書くのにロック待ちして性能劣化。よくある話だ。
悲しかったのは、Log4JでAppenderにだけThresholdを設定していて、結局ログは出力されない点。Root Loggerに何もレベルを指定していなかったので、debugレベルで処理が進む。スレッドダンプ取ったら、debugメソッドが呼ばれていたのですぐに分かったけど。
スレッドダンプ、簡単なので読んでくださいと念を押し、さらに侍も紹介して退散。
Log4Jを呼んでいたのはXercesだった。ロック待ちしてくれたおかげで、やたらとinitializeが呼ばれていることが分かった。要はXercesの使い方が悪かったということか?そこも検討して直してもらうよう、コメント。
しかし、これだけSOAPだの何だのでXMLマンセーな世の中なのに、XML関連ライブラリの使い方ノウハウが殆ど広まっていないことに危惧を覚える。何でもかんでもnewしてたらそりゃ遅いだろう。
自分もこれらのライブラリは大して分かっていないが、initializeとかloadとか、重そうなところは検討つくし、スレッドセーフかどうかを考えて、そうならキャッシュしてスレッド間で共有しようと考える。
使い方ノウハウとか、どのメソッドがスレッドセーフだとかそうじゃないとかの情報はどこかにまとまっていないかな。
Sourceforgeに出てた。正式リリースまでもう少しか?
おつかれっ。それはそもそもセンスないってやつです>やたらとinitialize