- ベストアンサー
DB接続エラーが発生していますか?原因と回避方法を教えてください。
- Servletで画像データベースを構築し、DBへの接続エラーが発生しています。
- ブラウザーの画面でDBから取り出した値は全てnullで表示されています。
- TomcatからJDBC経由でPostgresに接続が出来ていない可能性があり、原因と回避方法を知りたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
OutOfMemoryError についてフォロー。もしOutOfMemoryError がでている場合、可能であればヒープサイズを増やしましょう。 -Xmx512m とかいうオプションが起動スクリプトにあるかと思います。この512の部分がヒープサイズ(Javaの作業領域みたいなの)になります。 ちょっとやそっと増やしてもおっつかないくらいであればアプリケーションの処理内容を見直す必要があるかもしれません。 画像処理というのはヒープをたんまりつかいますから。 あまりにも大きな画像は扱わないようにするとか、そもそもその処理をしないようにするとか。
その他の回答 (4)
- gantsu-teacher
- ベストアンサー率36% (4/11)
コネクションの制限はどうなっていますでしょうか? 一度DBサーバーのコネクション制限数を上げて見て様子を見てはいかがでしょうか? コードが無いのでなんともいえませんが、ひとつの処理中に大量のコネクションを張っていませんか? もしくは、開放を忘れていませんか? OhMabuさんがテストする際にはどういうテストをなさっているのでしょうか? 動作確認だけでなく長時間の負荷テスト(同時接続)などを行って実働状況に近づけてみましたか? たまに起きるということは処理集中時のコネクションの枯渇による影響だと思われます。
- yusukey
- ベストアンサー率56% (17/30)
画像処理を加えた後に発生しているかも、とのことですからもしかするとTomcat側のヒープ領域が足りなくなっているのかもしれませんね。まずはログを確認しましょう。 ログに OutOfMemoryError など記録されていませんか? これが発生しては正常な動作は期待できません。 ヒープ領域の使用状況を確認するには -verbose:gc オプションをつけます。するとガベージコレクションが発生するたびに空き領域などが標準出力に記録されます。 侍などを使えば使用状況の遷移をグラフ化して確認することができます。
- yusukey
- ベストアンサー率56% (17/30)
正常に動作しないとき、まずDBへの接続があるかどうか確認しましょう。 netstat -an で接続状況を確認できます。デフォルトのままならば5432番への接続が確立(ESTABLISHED)しているいことが確認できるでしょう。 ↓こんなかんじで -- tcp4 0 0 127.0.0.1.51080 127.0.0.1.5432 ESTABLISHED -- 接続がなければTomcat側のデータソースの設定などを確認してください。 接続しているのに動作がおかしいということならばなんらかの予期せぬ例外が発生しているかのうせいがあります。不正なSQLを発行して例外が発生して適切に値を取得できていないのではないでしょうか。 ログを確認して、それらしき形跡がなければ例外を握りつぶしている可能性があります。 try{ //DBへの接続、SQL発行など }catch(SQLException(またはException) sqle){} といったコーディングはありませんか? この場合なんらかの問題が発生しても確認できませんので適切にスタックトレースを表示するなりフォローの処理を加えるなりしましょう。
補足
結果的にDBへの接続が出来なくなっているようです。 ただ、1年ほど動かしていて2度この状況になりましたが、私の方(私の操作中)では、正常に動作しており、再現性がなくて困っています。 トンチンカンなことかもしれませんが、postgresのプロセスがなんらかの原因で立ったままになり、メモリを圧迫しているのかな?とかも疑っています。 デバック中はプロセスビューワーなるものを立ち上げながら、各プロセスを監視しながら行ったりもしているのですが、どうも原因がつかめないんです。 一つ気になっているのは、最初は画像のサイズ合わせを各クライアント側で行っていたのですが、途中からImageIOを使用して、サーバー側で行うようにしました。どうも、それ以降、問題が発生しているように思います。
- rinkun
- ベストアンサー率44% (706/1571)
Servletでログを取ってないの? ブラウザ画面だけ見てデバッグなんて無謀でしょ。
補足
ありがとうございます。 >ブラウザ画面だけ見てデバッグなんて無謀でしょ。 はい、でも、状況として書いているだけで、そのようなことをしているなんて一文もかいていませんので。もし、質問が言葉たらずならごめんなさい。
お礼
そのようです。 JDBCのメモリを先に喰っていたようで、まず接続が出来なくなっていたようです。その段階で、こちらに通知がくるようにしていたので、なせDBがとなってしまっていました。 どうも、ありがとうございました。