MySQLにてtoo many connectionsがでてしまう!! set globals max connection
今日サーバーが止まっているとの報告がありました。
確認してみると、
Too many connections エラーがでていてサーバーのすべてのシステムが使用不可に!!!
調べてみると、mysqlには最大mysqldに接続しているコネクションの数が多すぎるんだよ!!
とお怒りの模様。。。。
このサーバーそんなにクライアント多くなるシステム入っていたっけ・・・・
問題は、maxクライアントが100で少なすぎるかコネクションを閉じていないか、同じシステムでコネクションをつくりすぎているかのどれかだろうと・・・
でもこのシステムはcakephpかeccubeしか入っていないのでコネクションを作りすぎていることはないと思われるのですが・・・
まぁとりあえず対策
mysqlのクライアント数のmaxの同時接続数は、デフォルトでは100件に設定されているらしい。
待機時間は、8時間らしい。
最大接続数の確認方法
show variables like ‘%connection%’;
コマンドでの確認方法
set global max_connections=設定したい接続数;
通常はmy.cnfで設定を出して再起動ですね。
my.cnfの設定方法
# The maximum amount of concurrent sessions the MySQL server will
# allow. One of these connections will be reserved for a user with
# SUPER privileges to allow the administrator to login even if the
# connection limit has been reached.
max_connections = 512
mysqlのwait_timeoutの設定方法(コマンド)
SET GLOBAL wait_timeout=60; mysqlのwait_timeoutの設定方法(my.cnf) set-variable = wait_timeout=60
この方のブログにアドバイスが書いてありました。
ここです
・メモリや環境にもよるけど、Linuxだと500~1000は大丈夫
・使ってない待機中のコネクションが多いのは、待機時間を減らせば回避可能
・プログラム内で複数回コネクションを作ったり、コネクションを閉じなかったりすると待機中のコネクションだらけになる(そして、8時間すぎてコネクションが消えるまで他のコネクションが作れず、MySQLへアクセスできない)。
・同時接続数はApacheの接続数と同様が良い(Apacheが100だったら、MySQLも100とか)
・Yahooでは、thread_cache=150 と wait_time=10 (待機時間10秒)でスレッド生成のオーバーヘッドを減らしているらしい
なかなか考えて出さないといけない設定ですね。勉強になりました!!