2

タイトルの言い方が本当にわからなかったので、できる限りのことをしました。

最終的なスクリプト (Web ベース) の実行時間を計算する際に問題があります。

私たちは簡単なことをします

if(time()-$_SERVER['REQUEST_TIME']>X){
    logMe();
}

スクリプトの実行に X 秒以上かかる場合があることがわかりました。

これは、mysql、memcached、sphinx、またはその他の通常の原因の問題ではないことを 100% 確信しています。お願いします...それが「私たちの側の何か」ではないと仮定してください。

負荷の高い処理が行われ、まだいくつかのヒットが発生する前に、この単純な実行時間チェックをスクリプトの途中に追加しました。主に遠く離れた海外のお客様。

だから私はこれが何らかの形で出力バッファに関連しているに違いないと考えています。

したがって、質問は次のとおりです。

PHP + Apache では、出力バッファはどのように機能しますか? あなたが次のものを持っているとしましょう:

[ 10KB HTML Body Head ]

[ Mysql query #1 ]

[ 50KB HTML Body ]

[ Mysql query #2 ]

[ 20KB HTML Body Footer ]

この例では、最大 2KB/秒のクライアント接続があるとします。

したがって、最も理想的な状況では、 「HTML Body Head」を受信するのに 5 秒かかります。

「Mysql クエリ #1」が実行されるまでに 5 秒かかるということですか?

私はあなたがアイデアを得ると思います。クライアント接続が遅いと、スクリプトの処理にかかる時間に影響しますか?

さらに: php.ini 設定はこれに影響しますか? また、flush()/ob_flush() は行いますか?

ありがとう。

4

2 に答える 2

3

PHPは可能な限り最高の速度で実行され、出力をバッファリングする必要がある場合、バッファが空になるまでスクリプトは一時停止しません。スクリプトが終了するまで、バッファがいっぱいになり続けます。

'X'の値はどれくらいですか?$ _SERVER ['REQUEST_TIME']はApache自体からのものであり、ヒットが発生したときです。子プロセスが要求を処理できるようになるのを待つために、Apacheで一時停止が発生する場合があります。リソースが開くのを待っている間、PHPで一時停止が発生する可能性があります(たとえば、データベースハンドルが解放されるのを待つ必要がないため、データベースハンドルが解放されるのを待ちます)。その場合、データベース自体が実行され、ディスクからデータを取得するなどの遅延が発生する可能性があります。

于 2011-07-07T19:31:13.967 に答える
0

PHPはサーバーサイドであるため、スクリプトの実行時間はクライアントの接続に依存しません。

PHPは通常、スクリプトが終了すると出力します。

フラッシュは、このスクリプトがまだ終了していないときに出力するために長時間実行されるスクリプトに使用できます。

それでも、クライアントはページをダウンロードする必要があります。

接続をアップグレードする以外に2KB/秒のクライアントがある場合にできることはたくさんあるとは思わないでください:P

于 2011-07-07T19:30:48.133 に答える