私は非常に特殊な問題があります。 私はApache2.4の下でubuntuサーバー上で動作しているWebサイトを持っています。 サイトはPHPで書かれており、MySQLをデータベースとして使用しています。 私は、longblobとしてMySQLデータベース内の小さなファイルに対して "ファイルストレージ"を実現しました。ダウンロード中にApache2サーバー/ Webサイトが応答を停止する
MySQLデータベースからBLOB /ファイルをダウンロードするには、データベースへのPDO接続を開きます。
$sql = $pdoData->prepare("SELECT * FROM fileblob WHERE ID = ?");
$sql->execute(array($blobID));
$row = $sql->fetch();
$content = $row['data'];
via "echo $ content"次に、ファイルをブラウザに送信します。 これは完璧に機能します。しかしながら。ダウンロード中、サイト全体が応答を停止し、新しい要求がすべてタイムアウトになります。 ダウンロードが正常に続きます。
ダウンロードが4MBになると、Webサイトは再び機能し始めますが、非常にゆっくりです。終了すると、サイトは完全に正常に戻ります。
MySQLデータベースは、InnoDBのバックエンドを使用する唯一の6オープンSQL接続があり、ダウンロードの時間の間、など
500の同時接続の最大値を有します。 ディスク使用率は最大約20%、CPU使用率は10%未満 Apacheは1k同時接続(最大100人の子供がいる10スレッド)を処理するようにも設定されています。サーバーは、測定されていない1Gbps回線を介して接続されています。 ハードウェアのボトルネックは考えられません。
私には何が欠けていますか? 質問にお答えします...
あなたの出力バッファリングの設定は何ですか?スクリプトでPHPセッションを使用していますか? – CBroe
@CBroeはい、私はどこでもPHPセッションを使用しています。出力バッファが4096に設定されています – user3829915
_ "出力バッファが4096に設定されています" - なぜ約4MBで効果が変化するのか説明できます。この要求/スクリプトの一部で無効にしてみてください。また、セッション終了後すぐにsession_write_closeを使用してください。そうしないと、セッションデータファイルのファイルロックにより、同時に実行されているリクエストが「ハングする」ことがあります。 – CBroe