「PHPスクリプトから接続タイムアウトを設定する方法」のメモ
【はじめに】
最近、商品カタログをWebで表示するプログラムを作成し納品した。
お客様に商品登録をされてる状況ですが、7/7(火)朝に画面が表示されない、遅いという問題があるとの連絡あり。
調査すると、いつもではないが、htmlは比較的すぐに読まれるが(遅い時は遅いけど)、PHPスクリプトは無茶苦茶遅かったり、応答がない。
ただ、そうでないこともあり、要は安定していない。
Windows系のレンタルサーバーでプログラムを動かしているのだが、何が原因だろう。
動作環境のデータをダウンロードして開発環境(CentOS)や他社Linux系レンタルサーバーでテストしてみたが、何もストレスを感じることなく使える。
(さらっと1行で書きましたが、ファイルのダウンロード・アップロード、データベースのエクスポート・インポートをやってます。
問題のサーバーが安定しないので、ftpは遅い、途中で切れるため、時間はかかってます^^;この仕事も評価してくれるお客様だったら苦労は報われます)
導入した当初は普通に動いていたことを考えると、レンタルサーバー側に原因があるような気がする。
とはいうものの、原因がわかるまであえて断言しないようにします(苦笑)。
【対応開始】
とりあえず、遅い現象が発生した時に、何が原因なのかを調べるため、スクリプトを書いてみました。
主に調べたことは以下の2点です。(他にもやっていますが、集約するとこんなもんです)
(1)スクリプトは本当に実行されているのか(time()関数の値を記録し表示)
(2)DBにMySQLを使っているが、接続で待たされているのではないか。
結論は、
(1)スクリプトの実行開始までに30秒とか40秒とか待たされる、また実行されないことがある。
実行されると1秒以内にはプログラムは終了している。一度だけ50秒かかったことがあるが、再現しない。
(2)MySQLとの接続は問題なさそう。
htmlファイルは比較的早くGETできるので、プログラム実行の問題と思われます。サポートに調査をお願いすると、
レンタルサーバーに障害が起こっているとの回答あり。先に見ておけばよかった^^;。
障害報告ページを見ると7/6正午頃から障害発生と書かれている。
しかし、サービス名だけなので、契約しているサーバーなのかどうかわからないよぉ(苦笑)
まだ復旧していないようだが、レンタルサーバー側の対応を待つことにする。
【では本題に入ります】
前置きが長くなりました^^;。
今回のテストプログラム作成でMySQLの接続タイムアウト設定についても調べたが、すぐにわからなかった。
当初、mysql_connect()の引数か何かで設定できるのかと思ったのだが、該当するものがない。
ネットで調べてみるとphp.iniの設定変更でいけることが判明。
後述するコードで確かに変更できていました。
複数台のMySQLサーバーの中から生きているサーバーに接続するなんてことができそうですね。
(実際にタイムアウトしているかどうかは未検証です)
【設定コード】
<?php
$key = "mysql.connect_timeout";
$new_sec = 10;
echo "local value:".ini_get( $key )."<BR>";
ini_set( $key, new_sec );
echo "new value:".ini_get( $key )."<BR>";
/*
== result ==
local value:60
new value:10
*/
?>
【謝辞】
掲載しているソースコードは
ソースコード HTML化 コンバーター「唐辛子」
を利用してBlog用のhtmlを生成し、貼り付けています。いつも、ありがとうございます。
【はじめに】
最近、商品カタログをWebで表示するプログラムを作成し納品した。
お客様に商品登録をされてる状況ですが、7/7(火)朝に画面が表示されない、遅いという問題があるとの連絡あり。
調査すると、いつもではないが、htmlは比較的すぐに読まれるが(遅い時は遅いけど)、PHPスクリプトは無茶苦茶遅かったり、応答がない。
ただ、そうでないこともあり、要は安定していない。
Windows系のレンタルサーバーでプログラムを動かしているのだが、何が原因だろう。
動作環境のデータをダウンロードして開発環境(CentOS)や他社Linux系レンタルサーバーでテストしてみたが、何もストレスを感じることなく使える。
(さらっと1行で書きましたが、ファイルのダウンロード・アップロード、データベースのエクスポート・インポートをやってます。
問題のサーバーが安定しないので、ftpは遅い、途中で切れるため、時間はかかってます^^;この仕事も評価してくれるお客様だったら苦労は報われます)
導入した当初は普通に動いていたことを考えると、レンタルサーバー側に原因があるような気がする。
とはいうものの、原因がわかるまであえて断言しないようにします(苦笑)。
【対応開始】
とりあえず、遅い現象が発生した時に、何が原因なのかを調べるため、スクリプトを書いてみました。
主に調べたことは以下の2点です。(他にもやっていますが、集約するとこんなもんです)
(1)スクリプトは本当に実行されているのか(time()関数の値を記録し表示)
(2)DBにMySQLを使っているが、接続で待たされているのではないか。
結論は、
(1)スクリプトの実行開始までに30秒とか40秒とか待たされる、また実行されないことがある。
実行されると1秒以内にはプログラムは終了している。一度だけ50秒かかったことがあるが、再現しない。
(2)MySQLとの接続は問題なさそう。
htmlファイルは比較的早くGETできるので、プログラム実行の問題と思われます。サポートに調査をお願いすると、
レンタルサーバーに障害が起こっているとの回答あり。先に見ておけばよかった^^;。
障害報告ページを見ると7/6正午頃から障害発生と書かれている。
しかし、サービス名だけなので、契約しているサーバーなのかどうかわからないよぉ(苦笑)
まだ復旧していないようだが、レンタルサーバー側の対応を待つことにする。
【では本題に入ります】
前置きが長くなりました^^;。
今回のテストプログラム作成でMySQLの接続タイムアウト設定についても調べたが、すぐにわからなかった。
当初、mysql_connect()の引数か何かで設定できるのかと思ったのだが、該当するものがない。
ネットで調べてみるとphp.iniの設定変更でいけることが判明。
後述するコードで確かに変更できていました。
複数台のMySQLサーバーの中から生きているサーバーに接続するなんてことができそうですね。
(実際にタイムアウトしているかどうかは未検証です)
【設定コード】
<?php
$key = "mysql.connect_timeout";
$new_sec = 10;
echo "local value:".ini_get( $key )."<BR>";
ini_set( $key, new_sec );
echo "new value:".ini_get( $key )."<BR>";
/*
== result ==
local value:60
new value:10
*/
?>
【謝辞】
掲載しているソースコードは
ソースコード HTML化 コンバーター「唐辛子」
を利用してBlog用のhtmlを生成し、貼り付けています。いつも、ありがとうございます。
- Newer: 気になる数字77777
- Older: 手作りお手紙セット展