- - PR -
apacheでタイムアウト
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-08-04 10:17
apache2.0.58
php4.2.2 apacheのhttpd.confのtimeout=60 php.iniのmax_execution_time=60 上記設定がされている状態で、PHPの処理で for文の中でSQLを5万回実行しております。 その際、3万件処理した時点で60秒に達してしまうので タイムアウトとなり処理が中断されると思ったのですが、 処理が中断されず、5万件処理を続けてしまい、100秒後に apacheへの要求元対して結果が送信されました。 実施したい事は60秒でタイムアウトとし、処理を止めて 要求元にタイムアウト(HTTP 502エラー)を返却したいのですが、 何か他の設定で実現することは可能でしょうか? DB接続はadodbでコネクションを取得し、SQL発行前でトランザクション スタートを実施し、for文を抜けたあと(5万回SQL実施後)コミットとなるような 実装をしています。 | ||||
|
投稿日時: 2008-08-04 23:12
httpd.confのtimeoutはクライアントとのsocketのタイムアウトだと思うので、違うんじゃないでしょうか?
php.iniのmax_execution_timeもシステムコールの時間は考慮しないので、現在の結果になっているんじゃないでしょうか?PHPのマニュアルを参照してください。 http://www.php.net/manual/ja/info.configuration.php#ini.max-execution-time 「for文の中でSQLを5万回実行」とのことなので、毎回(あるいはn回に1回)実時間を計測して希望の時間以上になったらfor文をbreakして502で返すようなスクリプトにすればいいんじゃないでしょうか? _________________ 「ご教授」はできません | ||||
|
投稿日時: 2008-08-05 10:10
ご回答ありがとうございます。 私も簡単な対処案として「for文をbreak」を検討しておりました。 但し、何かの設定でも対処出来るのではないか?と思い投稿させて頂きました。 max_execution_timeはマニュアルを見たのですが、ちょっと理解が出来なかったです。 httpd.confのtimeoutを設定しているのにも関わらず、クライアントとの接続で タイムアウトしない理由としては、PHPからDBへのコネクションが継続している 為と思い、DBとのコネクションを時間で切断させる方法を調べています。 DBはMySQLを使用しadodbで以下のようにコネクションを生成しております。 $dsn = 'mysql://user:pwd@localhost/mydb'; $conn = ADONewConnection($dsn); |
1