[Java Tips]StackOverflowErrorは、catch(Exception e)で拾えない

# 今日も二連投・・・。しかも仕事ネタ。

システムも運用フェーズに入り、バージョンアップを重ねると、単純なバグはほぼ出なくなります。

ということは、残ってるのはレアでやっかいなバグばかり・・・。解析に時間も掛かります。

で、この間ヤラれたのが、このStackOverflowErrorの問題。

最初に障害が発生したときには、ログにおかしなスタックトレースが出て、再現性も特定できなかったので解析不能でした。

その後、ある時、100%再現するケースを見つけたので、デバッグコメントをガンガン入れてやってみたら、どうもXMLParserのparseでコケてることが判明。

なので、その行をピンポイントでtryーcatch(Exception e)で括ってみたら、あれ?引っかからない!何で?

・・・で、試しにExceptionの親であるThrowableでcatchしたら、やっと取れた!

中を見ると、StackOverflowErrorだったんです。

どうやら、XMLをパースする際にスタックサイズが足りなくなったらしいです。

(なので、スタックトレース自体も壊れてて変なのが出てた?(これは不明))

ということで、jvmのスタックサイズを増やして(-Xssオプション)解決。

それにしても、xxxErrorって”catch Exception”じゃ拾えないんですね。知りませんでした。

ログから追えない障害って、ほんとツラいです。

コメントを残す

メールアドレスが公開されることはありません。