Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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数になってしまうので注意。

kenjiszk
インフラエンジニア 1年ほどiOSに浮気していましたが最近またインフラやってます 最近はRubyとGoもいじってます
http://kenjiszk.hatenablog.com/
finc
健康寿命を伸ばすアプリFiNCの開発・運営を行うモバイルヘルステクノロジーベンチャー
https://finc.com
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした