負荷時のmysql_connect()エラー - PHPプロ!Q&A掲示板

3540

  • 0P

負荷時のmysql_connect()エラー

質問日時 / 2012年1月11日 23:12    回答数 / 2件

Questioner:  eyi8888  このエントリーをはてなブックマークに追加 

キーワード / mysql    負荷    ab   

お世話になっております。
質問させていただきます。

CentOS上で、php(5.3.8)でmysql(14.14)を動かしているのですが
同時接続数が多くなりそうなサービスのため
abコマンドで負荷をかけたところ、負荷レベルによっては以下のWarningが出てしまいました。
  1. Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (11) in /var/www/html/test.php on line ***

--test.php--接続部分抜粋ソース(test.phpはほぼ以下の内容だけです)
  1. $link = mysql_connect($host, $user, $pass);
  2. $db_selected = mysql_select_db($dbname, $link);
  3. $q_insert = "INSERT INTO ".$table." (test_value1, test_value2) VALUES ";
  4. $q_insert .= '("test1","test2")';
  5. $result_insert = mysql_query($q_insert);
  6. echo "test - end";

例えば、同時接続50で複数回テストしたところ
  1. ab -n 500 -c 50 http://localhost/test.php
Failed requests数は0で、Warningも出ませんでした。

ところが、同時接続100でテストしたところ
  1. ab -n 1000 -c 100 http://localhost/test.php
上記のWarningが出てしまい、Failed requests数 = Warning数 になってしまいます。
Warning数は試行ごとにばらつきがあります(0〜数百)

<確認したところ>
*/var/lib/mysql/mysql.sock はあります。削除もできないようにパーミッションも変えてみました。
*php.ini のmysqlの接続数関係はデフォルト(-1)のままです。
*my.confの max_connectionsは1000にしました。
*httpd.confのMaxClients,ServerLimitは1000にしました。
*各設定後、httpd,mysqldはrestart済み。
*AWSを使っているので、よりスペックの高いインスタンスに載せ変えてみたのですが、結果変わらず、でした。

Warningが発生する原因はなんでしょうか?
心当たり等ありましたらお教えいただければと思います。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01exceptionCatcherこれはPHPというよりOSまたはMySQLのコミュニティで質
 ┗A01-1eyi8888レスありがとうございます! mysqlのほうのログには

回答一覧

並び替え:

A01 参考になった
answererexceptionCatcher [1月18日 14:10] (最終編集:1月18日 14:12)

これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。

ぱっと思いついた範囲で記すと
MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるように
OSにも「ある時点においてオープン可能なファイルやソケットの最大数」等の制限があります。
(あまり詳しくないのですがカーネルパラメータはsysctlコマンド等で確認できるようです。)

>*AWSを使っているので、よりスペックの高いインスタンスに載せ変えてみたのですが、結果変わらず、でした。

AWSはアマゾンのPaaS型クラウド(CentOSインストールまではアマゾンが行うが、その後のApache・MySQL・PHP等の設定や必要に応じたバージョンアップはeyi8888さんが行うタイプのクラウド)でしょうか?
また、そうだとした場合、AWSは独立した専用サーバでしょうか?
あるいはVM等を用いた仮想環境のゲストOSとしてCentOSを使用されてるのでしょうか?
もし仮想環境のゲストOSの場合、アマゾンがゲストOSのカーネルパラメータを低めに設定してるのかも知れませんね。

以上ご参考までに。

この意見に回答する

ツリーへ TOPへ

A01-1
replyereyi8888 [1月20日 14:20] (最終編集:1月20日 14:23)

レスありがとうございます!
mysqlのほうのログには何も出ず、httpdのログもphpのWarningだけでしたので
あまり判断もつかなかったのですがphpの範疇かな、と思っていました。
sysctlでいろいろ見てみたり値を変えてみたりしましたが
挙動に変化はありませんでした。
(教えていただいたキーワードを元に、http://thinkit.co.jp/cert/tech/23/2/2.htm あたりを参照してみました)

で、ちょっとphpとかmysqlとかのバージョンを変えてみようかと思い
yum update したところ…改善しました!
同じApacheBenchコマンドを叩いてもWarningやFailed requestはでなくなりました。
…まぁupdateしたところ、いろんなモジュールがザバザバupdateされたので
何が原因かはちょっとわからないのですが。

最新版を使うのは基本的なところでしたね。
お騒がせしましたです。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
3次元配列に格納した値がちゃんと表示されない
 このエントリーをはてなブックマークに追加 
A
>>CODE $_SESSION["item"][$item_id_]["amount"]=$amount; <<CODE 変数「$item_id_」(「$item_id」ではない)には、何をセットされていますか? Notice: Undefined variab...

>>続きを読む

変数名のtypoなど簡単なミスでも自分で気が付かないことはよくあります。どうしても解決できないときは、このように他の人に見てもらったり、コーヒーでも飲んでリフレッシュしてから再度トライしてみてください。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)