數據庫沒有問題,問題在於如何處理來自軟件的數據庫連接。
您的腳本設置的方式是每個連接到您的Web服務器也打開一個連接到MySQL的連接。這不是你想要的場景。
提高限制不會解決問題,它只會延遲另一個錯誤。你應該做的是使用持久連接。
使用php-fpm
而不是服務器API(如mod_php
)的原因之一是因爲啓動了一定數量的PHP進程並創建了與服務的連接池。
,流量爲以下幾點:
- 使用
php-fpm
。 Apache
和nginx
可以使用FCGI接口來說話php-fpm
進程
- 爲
php-fpm
提高子進程的數量。這不應該過大,默認的配置通常工作了,我會讓你不跑六核系統中的猜測,所以4-6的子進程應該罰款
- 使用持久的MySQL連接
這是做什麼用的?您的服務器接受請求並將其發送到php-fpm
,它在空閒時對其進行處理。每個進程使用1個連接到MySQL。這意味着你永遠不會像你一樣遇到某種硬性限制。
如果你的服務器很忙,服務器應該排隊請求,直到PHP能夠處理它們。無論你使用的是Apache
還是nginx
,這種方法都能正常工作。
如果您的網站很忙,那麼Web服務器可能會更快地接受連接並提供PHP用於處理動態內容的靜態內容。在這種情況下,您可以選擇添加運行php-fpm
的另一臺物理機(或更多)。對於提到的兩個Web服務器,指導您的Web服務器在爲PHP提供服務的計算機之間進行循環訪問是微不足道的。
底線是你想以最佳的方式利用你的資源。在每個請求上打開和關閉MySQL連接都不是最佳選擇。連接池是。
您需要提供一些關於該軟件的附加細節以及如何生成該錯誤。你還應該描述你所嘗試過的,你正在使用的是什麼數據庫(MySQL?PostgreSQL?Oracle?MSSQL?) 它確實聽起來像一個數據庫問題。 –
我們使用Mysqli,PHP編寫的腳本。當網站上的用戶數超過時,會顯示錯誤。用戶來到網站點擊廣告。 –
這可能是您的腳本無法正確關閉連接。您通常在網站上有多少個併發連接? – spencdev