- - PR -
tomcatを再起動しないとデータベースにコネクトできない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-05-30 14:44
Tomcatを使用してjavaでWebアプリケーションを運用中なのですが、
セッションが切れてしまった状態で、再度データベースにアクセスすると コネクトできないという現象で困っております。 上記の現象になった場合、該当コンテナの停止→起動または、 tomcatの再起動で再度コネクトできるようになります。 当初はそのような問題は起こっていませんでしたが、 データベース構成をRACに変更したその日から上記のような 現象が起こるようになりました。。。 しかし、syslogをみてもエラーは出ておらず、 セッションが切れた際にDBのスプールが何か掴んでいるのか、 それともtomcatの問題なのか、、、 Oracleに詳しい方に問題がないか調べてもらいましたが、 未だ原因が特定できません。 (何かがつかんでるためコネクトしできない感じです) 環境は以下のとおりです。 OS : Linux 2.6.9 J2SE : Ver 1.5.0 J2EE : Ver 1.4 Webサーバ : Apache 2.0.59 サーブレットコンテナ : Tomcat 5.5.20 データベース : Oracle 10g (RAC構成) ちなみに、同一サーバ内で複数のアプリケーションを 運用していますが、殆どのアプリで同じ現象がみられます。 (構造が同じなので当たり前?) あまり経験がなく必要な情報を書けてないかもしれませんが、 何か情報又は対処法をご存知の方がいらっしゃいましたら ご返答をよろしくお願いします。 |
|
投稿日時: 2008-05-30 16:00
コネクトできない、とは具体的にどのような状況でしょうか?
ブラウザからTomcatのコネクションではなく、Tomcatからデータベースのコネクションの話・・ですよね? ログには何か例外など記録されていますか? 「何かをつかんでいる」、というのは Tomcat がフリーズしているといことでしょうか? フリーズをしている場合はスレッドダンプをとるとどこで止まっているのかわかりますよ。 |
|
投稿日時: 2008-05-30 16:17
>インギさん
ご返答ありがとうございます。 アプリケーションログでは、スレッド自体は走るのですが、 下記のDBコネクションの取得時にレスポンス待ちに なっているところまで確認できています。 javax.sql.DataSource dataSource = getDataSource(request); databaseConnection = dataSource.getConnection(); 例外は全く出てなく、ここでログがとまったままになっています。 お恥ずかしいことにスレッドダンプという存在を 知りませんでした。ご教授ありがとうございます! 取れるかどうかやってみます。 |
|
投稿日時: 2008-06-04 11:18
スレッドダンプを取れば、止まっているのがgetConnection()なのかどうかを知ることができます。さらにデータソースのコネクションプールで止まっているのか、Oracle JDBC Driver内で止まっているのかも分かるので、何かのヒントになるかもしれません。
コネクションプールで止まっているのであれば、コネクションリーク等の原因により、コネクションが枯渇している可能性があります。リークの原因を突き止めるとともに、プールの設定を変更して適度な時間でタイムアウトするようにしたほうがいいかもしれません。 ドライバ内で止まっているのであれば、Oracle側を調べましょう。 リスナーログを見れば、接続要求が届いているかどうか分かります。 v$sessionを見れば、セッションが実際に確立されているかどうか分かります。 v$session_waitを見れば、セッション内でどんな待機イベントが発生しているかが分かります。 |
|
投稿日時: 2008-06-04 13:52
>カーニーさん
ご返答ありがとうございます。 現在スレッドダンプを取るよう調整中です。 (tomcat再起動により、他に正常に動いている サービスにも影響が出るため) ご丁寧なご教示ありがとうございます。 ダンプの解析で分からない点がありましたらまた ご相談させていただきます! |
1