申し分なく、最適な fread チャンク サイズは試行錯誤に基づくものであるため、私の質問が完全に具体的ではないことはわかっています。しかし、私は皆さんの何人かがこれに光を当てることができることを望んでいました.
これにはサーバー関連のものも含まれるため、Stackoverflow が完全に適切な場所であるかどうかはわかりませんが、ServerFault と比較してより良い選択であるように思われました。
まず、2 つのスクリーンショットを投稿します。
http://screensnapr.com/e/pnF1ik.png
http://screensnapr.com/e/z85FWG.png
これで、PHP を使用してファイルをエンド ユーザーにストリーミングするスクリプトを作成できました。fopen と fread を使用してファイルをストリーミングします。これらのファイルのほとんどは 100MB を超えています。私の懸念は、サーバーの統計が上記のようになる場合があることです。2 つの画面は異なるサーバーのものです。どちらのサーバーも専用のファイル ストリーミング ボックスです。PHP がファイルをエンド ユーザーにストリーミングすることを除いて、それらでは何も実行されません。
私のサーバーが合計で約 4MB/秒のデータしかエンド クライアントに送信していない場合でも、ディスクの読み取りが 100M/秒以上であるという事実に混乱しています。この非常識なレベルの IO は、IO を待機し、タスクが山積みになるため、最終的に CPU をロックします。最終的にサーバーが完全に応答しなくなり、再起動が必要になります。
現在の fread チャンク サイズは8 * 1024に設定されています。私の質問は、ブロックサイズを変更して実験することはまったく役に立ちますか? クライアントは、平均 ~4MB/秒でデータをダウンロードするだけです。では、なぜディスクは 100MB/秒でデータを読み取るのでしょうか? サーバー側で可能なすべての解決策を試しました。潜在的なディスクの問題を排除するために、ディスクを新しいものと交換しました。これはスクリプトの問題のように見えます。おそらくPHPは、エンドクライアントに転送する量に関係なく、ディスクからデータ全体を読み取っていますか?
どんな助けでも大歓迎です。これが ServerFault に属している場合は、ここに投稿して申し訳ありません。また、実際のスクリプトのスニペットを投稿する必要があれば、私も投稿できます。