- PR -

apacheでタイムアウト

1
投稿者投稿内容
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 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実施後)コミットとなるような
実装をしています。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 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で返すようなスクリプトにすればいいんじゃないでしょうか?
_________________
「ご教授」はできません
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 2008-08-05 10:10
引用:

Java僧さんの書き込み (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で返すようなスクリプトにすればいいんじゃないでしょうか?




ご回答ありがとうございます。
私も簡単な対処案として「for文をbreak」を検討しておりました。

但し、何かの設定でも対処出来るのではないか?と思い投稿させて頂きました。
max_execution_timeはマニュアルを見たのですが、ちょっと理解が出来なかったです。

httpd.confのtimeoutを設定しているのにも関わらず、クライアントとの接続で
タイムアウトしない理由としては、PHPからDBへのコネクションが継続している
為と思い、DBとのコネクションを時間で切断させる方法を調べています。

DBはMySQLを使用しadodbで以下のようにコネクションを生成しております。

$dsn = 'mysql://user:pwd@localhost/mydb';
$conn = ADONewConnection($dsn);
1

スキルアップ/キャリアアップ(JOB@IT)