質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

14101閲覧

MysqlへのJDBCコネクションが繋げられなくなる

ryo_se

総合スコア68

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

1クリップ

投稿2015/10/19 08:35

現在本番運用しているmysqlを使用したJAVAのWebシステムにおいて、
半日ほど使っているとコネクションを取得できなくなる障害が発生してしまいます。
(Tomcatを再起動すると直ります)

下記の点を確認しました。
・コネクションのクローズ漏れ確認
・コネクションの最大接続数がオーバーしていないか確認
・エラーログはtomcat、mysql、appache全てにおいて出力されません。
ただしtomcatを再起動した際に「java.sql.SQLException: Cannot get a connection, general error」のエラーがtomcatのログに表示されます。

既に本番運用を開始してから一週間ほど立ちますが、原因を究明できず四苦八苦しております。
また検証機では再現することができません(ただ単に本番運用と同様の負荷をかけられないからだと思いますが)

少しでも解決方法に心当たりがある方がおりましたら、ご教授の程お願いいたします。

環境
Java8
Struts2
Tomcat8 8.0.22
Appache 2.4.12
Mysql 5.6.23
Linux

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eripong

2015/10/19 09:17

コネクションを取得できなくなる、というのは、具体的にはどういうことでしょうか?例外が発生するのか、あるいは処理がそこで止まるのか、その他どの様な現象でしょうか?また、コネクションの最大接続数がオーバーしていないかは、MySQL側の最大接続数なのか、Java側のコネクションプールの最大なのか、どの様に確認したのか、教えていただけますか?
ryo_se

2015/10/19 10:25

ログイン画面で例えると、ログインボタンを押したときにそのままフリーズしている状態です。 また、例外はその時点では発生していません。 (上記で書いた通り、tomcatを停止するとjava.sql.SQLExceptionの例外がでます) また最大接続数はjava側のContext.xmlでmaxIdleを設定したのと、mysqlではmax_connectionsを設定しています。
guest

回答2

0

ベストアンサー

コネクションプールからのコネクション取得時に処理が止まった想定ですね。

スレッドダンプを取って、内容を確認することをおすすめします。

Java - スレッドダンプの取り方 - #侍ズム
などで取り方は書かれていますが、

kill -3 <pid>

とするのが一般的です。

また、最大接続数ですが、maxIdleでなく、maxTotalではないでしょうか?

Apache Tomcat 8 (8.0.28) - JNDI Datasource HOW-TO

context.xmlの内容を、可能な限り提示していただければ、こちらでも確認します。

それから、上に書いたTomcatのマニュアルにもありますが、
removeAbandonedOnBorrowをtrueに設定すると、
一定時間以上使用されないコネクションを自動的にクローズしてくれます。
クローズ漏れが原因なら、根本対処にはなりませんが、一時的な対処にはなるかも知れません。
また、logAbandonedをtrueに設定することで、
クローズ漏れが疑われる箇所をログ出力してくれるはずなので、
試してみても良いかも知れません。

ただ、クローズ漏れとは別の原因かもしれないので、
スレッドダンプによる確認は行った方が良いと思います。

投稿2015/10/19 10:35

編集2015/10/19 13:07
eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo_se

2015/10/20 11:28

ありがとうございます、下記点で解決いたしました。 ①コネクションがclose漏れしている箇所があった  正確にはclose不可能な箇所でコネクションが張られてしまっており、  二重にコネクションが張られてしまう状態でした。 ②context.xmlの記述ミス 今までtomcat7を利用しておりましたが今回からtomcat8にし、 ご指摘の通り記述が変わったことを知らずにおりました。 そのため、closeされていないコネクションを自動的に切る設定も 動作していなかった様です。 大変助かりました、心より感謝致します。
eripong

2015/10/20 11:41

解決して、良かったです。 ①の件はlogAbandonedで分かったのですか?
guest

0

具体的な回答ではないので恐縮ですが、、

MySQLサーバにログインして

sql

1SHOW PROCESSLIST;

または

sql

1SHOW FULL PROCESSLIST;

というクエリを実行すると、MySQLに接続中のスレッドを一覧表示することができます。

WEBシステムを稼働中に定期的にこのクエリを投げてみると、何か分かるかも知れません。

https://dev.mysql.com/doc/refman/5.6/ja/show-processlist.html

投稿2015/10/19 08:51

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo_se

2015/10/19 10:26

既に実施済でしたが、Lockされているようなプロセスもない状態でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問