ひでっぷの技術メモ

はてなダイアリーから移行しました

mysqlでの不思議なエラーが解決!

前回の日記に書いた原因不明のmysqlの不思議なエラー
DBアクセスするメソッドをsynchronizedしてもだめ。
必ずおきる特定のテーブルのデータを取得する場合、もしエラーがでたらキャッシュしているデータを返すようにしましたが、なんと別のテーブルで同じエラーが出るようになりました・・・。
その別のテーブルで同じように対処すると今度は別のテーブルで・・・といたちごっこ。

客先からは1日に1回以上連絡がくる始末。特によく使用している端末でこのエラーが出ているよう。
正直どうしたもんか途方にくれていました。
その要因が今日わかりました。
いつもは客先から端末再起動後に連絡が来るのですが、今日は端末再起動前に連絡してくれました。
さっそくリモートで接続しコンソールを覗いてみると・・・

OutOfMemoryErrorが!

なんと、別スレッドでOutOfMemoryErrorが出た後のDB接続で必ずエラーが出るようです。
OutOfMemoryErrorの要因ですが・・・
呼び出し時の音声再生でClipをcloseし忘れていたというポカミスでした・・・。
前回Clipで再生した音声ファイルが途中で途切れる件を修正した際にバグを埋め込んでしまったようです。
あの修正をしてからこのエラーが良く出るようになったので最初は疑っていたのですが、何しろDBエラーが出るので気づきませんでした・・・。
Excedptionはログに書くようにしているのですがOutOfMemoryErrorはcatchできないので当然ログには残りません。
客先が端末再起動前に連絡をくれたのでわかりました。
直近で出ているエラーだけでなく全体を見ないといけないといういい教訓になりました。