- - PR -
コネクションプールの状態を確認するには?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-18 10:17
お世話になります。松本と申します。
【環境】 JAVA:J2SDK1.4.1 TOMCAT:4.1.18 DB:PostgreSQL OS:RetHat 現在上記の環境で開発を行っています。 データソースのコネクションプールを利用しているのですが サーバサイド(Servlet)の処理が混み合ってくると 利用可能なコネクションがなくなり例外がスローされます。 コネクションのプーリング数を増やせばいいのでは? と思ったのですが、利用者数が増えた場合などを想定すると 根本的な解決方法ではないと思いました。 そこで、コネクションプールの利用状況を確認し 混み合っている場合は「現在、サーバが混み合っています。」と メッセージを出せばよいのでは?と考えています。 「コネクションループの利用状況を確認すること」は可能なのでしょうか? もし、その方法をご存知の方がおられましたら、ご教授お願い致します。 また、このような状況はWEBシステムでは一般的に考えられる事象だと 思いますが、皆様はどのように回避されているのでしょうか? 以上、よろしくお願い致します。 [ メッセージ編集済み 編集者: mt2mt 編集日時 2004-12-18 10:20 ] [ メッセージ編集済み 編集者: mt2mt 編集日時 2004-12-18 10:20 ] [ メッセージ編集済み 編集者: mt2mt 編集日時 2004-12-18 11:24 ] [ メッセージ編集済み 編集者: mt2mt 編集日時 2004-12-18 12:04 ] | ||||
|
投稿日時: 2004-12-18 11:53
コネクションプールから、
アクティブコネクション数、アイドルコネクション数を 取得すれば、状態というのはわかるのではないでしょうか。 | ||||
|
投稿日時: 2004-12-18 12:01
お返事ありがとうございます。
すみません。説明不足でした。 データソースでコネクションプールを利用してます。 自前のコネクションプールなら可能なのでしょうが... データソースを利用している場合 コネクションプールの状態を知る方法があるのでしょうか? [ メッセージ編集済み 編集者: mt2mt 編集日時 2004-12-18 12:02 ] | ||||
|
投稿日時: 2004-12-18 15:23
データソースは触ったことないのでわからないです。汗
自分はDBCPを使いプールを作って、それで管理をしています。 ポスグレは詳しくないですが、 オラクルなんかですと、管理権限を持っていれば、現在の有効セッション数などを SQLで引っ張ってこれますよ。 そういうのがポスグレにあれば、どのプログラムがネックになっているのかわかると思います。 | ||||
|
投稿日時: 2004-12-18 16:00
汎用的な方法があったら知りたいです。 DBCP の BasicDataSource なら getNumActive(), getNumIdle() です。 これでチェックするとしてもタイミングが問題ですが。 その前に maxWait を増やして、ユーザに少々待ってもらうのも 手だと思います。 | ||||
|
投稿日時: 2004-12-19 01:18
同時実行スレッド数は無制限に増えるわけではないですから負荷が増えたからといって無限にコネクションを張ってしまうようなことはありません。
最大スレッド数と同等にコネクションプールの最大数を設定しておけばコネクションが枯渇するようなことはありません。 運用してからリソースが足りない!ということがないように予め JMeter などで機械的に負荷をかけて検証をしましょう。 テストにコストをかけておけば火消しコストが大幅に減りますのでトータルでは安く上がりますよ。 | ||||
|
投稿日時: 2004-12-19 12:13
インギ様
お返事ありがとうございます。 >最大スレッド数と同等にコネクションプールの最大数を設定しておけばコネクションが >枯渇するようなことはありません。 同時実行スレッド数が無制限に増えると勘違いしていました。 同時実行すレット数とコネクションプール数の設定を合わせてJMeterで検証してみます。 これで問題解決できそうです。 的を得た回答ありがとうございました。 |
1