Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
120
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@kenjiszk

MySQLでToo many connectionsが出た時の対応

MySQLでToo many connectionsが出た時にチェックする項目の整理

MySQL側で見る事

どのMySQLサーバーで起きているか分かっている時にはそのサーバーにログインして確認する。

設定値の確認

MySQLにログインしてmax connectionsの確認をする

mysql> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1000  |
+-----------------+-------+
1 row in set (0.00 sec)

my.cnfの設定の確認ではなく実際にサーバーにログインして確認する。設定が反映されていない可能性があるので。

現状のコネクション数の確認

processlistの確認。

mysql> show processlist;

(ずらーっと現状の接続プロセスが出る)

ここで出てくるプロセスの数がmax_connectionsと同じだったらToo many connectionsが発生する。
processlistには接続元のHost情報や実行しているクエリの情報が出るのでその情報を元に犯人を特定する。

クライアント(Webサーバー)で見る事

どのMySQLサーバーで起きているか分からない時には、クライアントでまずはサーバーの特定をする。

MySQL(3306ポート)への接続数確認

MySQLに接続しているクライアントサーバー上で以下を実行。

netstat -anp | grep 3306

これで3306に繫いでいる接続の数がMySQLのmax connectionsよりも多ければ、Too many connectionsが発生する。
クライアントが複数の場合には、それぞれの接続数の和がmax connectionsよりも多くなってはいけない。

各アプリケーションの接続数、接続方法確認

アプリケーションでconnections数の設定や、コネクションプーリングしているかどうかの設定が書かれているのでそこを確認する。

対応方法

max connectionsを広げる

max connectionsはオンラインで変更可能なので、mysqlにログインして以下を実行

mysql> set global max_connections = XXXX;

あまり上げすぎるとメモリを食うので、必要な分だけ上げる。
必要な分は前述のクライアントの状況を確認すれば分かる。

RDSの場合にはparameterグループを修正する。修正後自動的に反映される。

クライアント側で調整

mysqlのmax connectionsを広げられない場合には、クライアントの設定でconnection数を減らすようにする。

Railsの場合、connection数が5でもModel毎にestablish_connectionしていると、connection数 x process数になってしまうので注意。

120
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
120
Help us understand the problem. What is going on with this article?