我有一個很奇怪的問題。 我有一個在Apache2.4下的ubuntu服務器上運行的網站。 該網站是用PHP編寫的,並使用MySQL作爲數據庫。 我已經實現了「文件存儲」作爲longblobs在MySQL數據庫中的小文件。Apache2服務器/網站在下載過程中停止響應
當我想從MySQL數據庫下載一個blob /文件時,我打開一個到數據庫的PDO連接。
$sql = $pdoData->prepare("SELECT * FROM fileblob WHERE ID = ?");
$sql->execute(array($blobID));
$row = $sql->fetch();
$content = $row['data'];
通過「echo $ content」然後我將文件傳輸到瀏覽器。 所有這些工作完美無瑕。然而。在下載過程中,整個站點停止響應,每個新請求都會超時。 下載繼續正常。
當下載剩餘4MB時,網站會重新開始運行,但速度很慢。完成後,該網站已完全恢復正常。
MySQL數據庫使用一個InnoDB後臺,有一個最大的500個併發連接等
在下載的時候,都只有6打開SQL連接。 Apache的磁盤使用率最高爲20%左右,CPU使用率低於10% Apache也設置爲處理1k個併發連接(10個線程,最多有100個子項)。服務器通過無法計量的1Gbps線路連接。 我想不出任何硬件瓶頸。
我錯過了什麼? 我很高興回答您的任何問題......
什麼是你的輸出緩衝設置?你在腳本中使用PHP會話嗎? – CBroe
@CBroe是的,我正在逐字地使用PHP會話。輸出緩衝區設置爲4096 – user3829915
_「輸出緩衝區設置爲4096」_ - 這可以解釋爲什麼你看到的效果在4MB左右變化...嘗試禁用它的這個請求/腳本的一部分。此外,一旦完成會話,請使用session_write_close - 否則,會話數據文件上的文件鎖定也會使併發請求「掛起」。 – CBroe