2020.
04.
07
11:27:18
結論から書くと
・最大同時接続数を増やす
・1回の接続を短くする
で改善できます。
具体的には「/etc/my.cnf」の中に
のように
max_connections:最大同時接続数
wait_timeout:接続タイムアウト秒
の2つを記述して
でMySQLを再起動します。
「max_connections」は現在の値よりも大きい値を、
「wait_timeout」の値は、現在の値よりも小さい値を指定してくださいね。
それでは、詳細を書いていきます。
宣伝ですが、私は
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
というWebサイトを運営していてですね。
最近アクセス数が増えてきたためか、たまに
とかいうエラーメッセージが出力されて、コケるようになりました。
嬉しい悲鳴と言えなくもないですが、改善しないとヤバいよね?(--ゞというのが今回のきっかけです。
Google先生、教えてけろ(-人-)
ふむふむ(--)
MySQLのコネクションの
・最大同時接続数を増やす
・1回の接続を短くする
の対処を行えば改善できるっぽいと分かりました。
なるほどね。
エラーの内容が「コネクションが多すぎるよ!」だから
許容するコネクションの数を増やすか、
コネクションの数を減らせば解消できるわけですね。
最大同時接続数を増やせば「多すぎるよ!」と判断する基準が変わります。
例えば、今まで100人でギブアップしていたのが200人まで耐えるようになるわけです。
また、1回の接続時間を短くすれば、コネクションを掴んでいる時間が減ります。
それによって時間当たりの同時接続数が減るだろうな理屈です。
それでは、やってみましょう。
まずは、現在の最大同時接続数と接続タイムアウト秒を確認します。
MySQLに接続して、以下のクエリを実行します。
■max_connections(最大同時接続数)の確認
■wait_timeout(接続タイムアウト秒)の確認
私の環境では、以下の結果が表示されました。
■max_connections(最大同時接続数)の確認
■wait_timeout(接続タイムアウト秒)の確認
最大同時接続数が「151」で接続タイムアウト秒が「28800秒(8時間)」ですね。
ちなみに、実際に今までにあった同時接続数の最大は
で取得できます。
私の環境では、以下の結果が表示されました。
ふむ(--)
許容している最大接続数が151なのに対して、152(以上)の接続が来ています。
そりゃー、エラーになりますわな(^^ゞ
ということで、現状が把握できたので
max_connections(最大同時接続数):300
wait_timeout(接続タイムアウト秒):60秒(1分)
に変更することにしました。
最大同時接続数は、もっと増やせそうですが、
取りあえず倍あれば当分は大丈夫でしょ。
「/etc/my.cnf」の中に
を記述して、保存して、SSHとかでサーバに接続して
でMySQLを再起動して完了でっす\(--)/
「/etc/my.cnf」を書き換えないで
MySQLのコンソール上から変更するやり方もあるようですけどね。
例えば
とかのクエリを実行しても、変更できるみたいです。
私は試してないけど。
これで「too many connections」エラーが解消!……したかどうかは実は分からないですけどね。
取りあえず様子見の段階ですが、今のところエラーには、なっていません。
多分、解消したのだと思います。
そんな感じ\(--)/
・最大同時接続数を増やす
・1回の接続を短くする
で改善できます。
具体的には「/etc/my.cnf」の中に
[MySQLd]
max_connections = 200
wait_timeout = 60
max_connections = 200
wait_timeout = 60
のように
max_connections:最大同時接続数
wait_timeout:接続タイムアウト秒
の2つを記述して
service mysqld restart
でMySQLを再起動します。
「max_connections」は現在の値よりも大きい値を、
「wait_timeout」の値は、現在の値よりも小さい値を指定してくださいね。
それでは、詳細を書いていきます。
宣伝ですが、私は
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
というWebサイトを運営していてですね。
最近アクセス数が増えてきたためか、たまに
too many connections うんちゃらかんちゃら
とかいうエラーメッセージが出力されて、コケるようになりました。
嬉しい悲鳴と言えなくもないですが、改善しないとヤバいよね?(--ゞというのが今回のきっかけです。
Google先生、教えてけろ(-人-)
ふむふむ(--)
MySQLのコネクションの
・最大同時接続数を増やす
・1回の接続を短くする
の対処を行えば改善できるっぽいと分かりました。
なるほどね。
エラーの内容が「コネクションが多すぎるよ!」だから
許容するコネクションの数を増やすか、
コネクションの数を減らせば解消できるわけですね。
最大同時接続数を増やせば「多すぎるよ!」と判断する基準が変わります。
例えば、今まで100人でギブアップしていたのが200人まで耐えるようになるわけです。
また、1回の接続時間を短くすれば、コネクションを掴んでいる時間が減ります。
それによって時間当たりの同時接続数が減るだろうな理屈です。
それでは、やってみましょう。
まずは、現在の最大同時接続数と接続タイムアウト秒を確認します。
MySQLに接続して、以下のクエリを実行します。
■max_connections(最大同時接続数)の確認
show global variables like 'max_connections';
■wait_timeout(接続タイムアウト秒)の確認
show global variables like 'wait_timeout';
私の環境では、以下の結果が表示されました。
■max_connections(最大同時接続数)の確認
Variable_name | Value |
---|---|
max_connections | 151 |
■wait_timeout(接続タイムアウト秒)の確認
Variable_name | Value |
---|---|
wait_timeout | 28800 |
最大同時接続数が「151」で接続タイムアウト秒が「28800秒(8時間)」ですね。
ちなみに、実際に今までにあった同時接続数の最大は
show global status like 'max_used_connections';
で取得できます。
私の環境では、以下の結果が表示されました。
Variable_name | Value |
---|---|
Max_used_connections | 152 |
ふむ(--)
許容している最大接続数が151なのに対して、152(以上)の接続が来ています。
そりゃー、エラーになりますわな(^^ゞ
ということで、現状が把握できたので
max_connections(最大同時接続数):300
wait_timeout(接続タイムアウト秒):60秒(1分)
に変更することにしました。
最大同時接続数は、もっと増やせそうですが、
取りあえず倍あれば当分は大丈夫でしょ。
「/etc/my.cnf」の中に
[MySQLd]
max_connections = 300
wait_timeout = 60
max_connections = 300
wait_timeout = 60
を記述して、保存して、SSHとかでサーバに接続して
service mysqld restart
でMySQLを再起動して完了でっす\(--)/
「/etc/my.cnf」を書き換えないで
MySQLのコンソール上から変更するやり方もあるようですけどね。
例えば
set global max_connections=300;
とかのクエリを実行しても、変更できるみたいです。
私は試してないけど。
これで「too many connections」エラーが解消!……したかどうかは実は分からないですけどね。
取りあえず様子見の段階ですが、今のところエラーには、なっていません。
多分、解消したのだと思います。
そんな感じ\(--)/