Oracle client libraryのバグではまる

現象

Oracleへアクセスするクライアントライブラリを使うアプリケーションが、ある日から軒並みビジーループにはまるようになった。

解析

問題が発生した日の周辺でアプリケーションを触った形跡はない。
ライブラリに同梱されていたsqlplusも動かない。breakは効いて終了はできる。ループに嵌ると妙にsystemのCPU時間が長い。
sqlplusをstraceしてみるとtimes(2)を呼びまくっている様子。それらしいキーワードでググると、どうもOracleのクライアントライブラリ自体が持つバグで、稼働プラットフォームのuptimeに起因するものであるようだ。しかし、問題が発生する閾値となる値は報告者によってまちまちで140日ぐらいで起こると言っているケースから200数十日で発生すると言っているものまでマチマチ。この辺の詳細はソースが見ることが出来ないので確定的な事は言えないが、問題があることは確かなようだ。ちなみに、今回問題となったサーバでは丁度200日を越えた程度だった。
根本対策のパッチは探すとしても、とりあえずの対応としてリブート。直る、うわーん。

教訓

  • CPUのusage監視をしているのだが、上限を100%で切ってしまっていたため、疑似4wayのSMP機のCPU時間だと監視を振り切ってしまっていた
  • バイナリが化けていないかをハッシュでチェック
  • 暴走時にsystemのCPU時間が妙に長い(50%以上ある)ときは、システムコールを呼びまくるようなループにはまっていることが多い
  • 定期的な再起動を(え?)
  • Oracle捨て