2016-03-16 22 views
-1

我有兩個運行PHP的Apache服務器實例連接到本地的MySQL服務器。PHP到mysql持久連接沒有被使用

由於在同一個PHP頁面(使用不同的參數)的數千個請求的使用在幾分鐘內完成,在一秒鐘內完成,所以我想利用持久的mysql連接,因爲我發現由於操作系統沒有足夠快地回收它,因此我的套接字用完了。

我有一個實例這個工作有此配置:

$link = mysqli_connect("p:$db_server_ip",$dbuser,$dbpassword,"db","8080"); 
if (!$link) { 
     error_log("Failed to connected ".mysqli_connect_error()); 
     die('Could not connect: ' . mysqli_connect_error()); 
} 

當我看的MySQL連接數時,我有很多進來我只看到幾百連接http請求的哪在第一臺服務器上很好。

在我認爲是相同的操作系統,apache,php和mysql配置以及版本和php代碼的第二臺服務器上,我沒有看到正在使用的連接,而且正在打最大mysql連接限制,如果我查看進程列表在MySQL中,他們都只是在睡覺。

有人可以解釋爲什麼我看到行爲上的差異,還有其他可供選擇的問題是關於連接是否被重用。

PHP 5.3.3版本的Apache /2.2.15(紅帽)

回答

0

持久連接是爲你的應用是一個壞主意。事實上,它可能會比您現在正在執行的方式更快地將您的MySQL服務器最大化。持久連接的功能是在PHP線程終止後保持連接打開。這意味着你有一個連接不斷打開連接,另一個PHP線程可能會或可能不會連接到。因此,您可以更快地達到最大連接。

這裏最好的解決方案是增加最大連接數並讓PHP在PHP線程關閉時終止連接。

+0

感謝您的反饋,MySQL的負載低,因爲查詢很快,問題似乎是我的服務器無法創建任何更多的連接在TCP層面從PHP到MySQL,我相信,因爲一旦PHP關閉它操作系統不會將該端口釋放兩分鐘。在服務器上,我有它的工作,它運作良好,我只是無法弄清楚爲什麼第二臺服務器不會以同樣的方式反應。 – mattb

+0

我的最大連接數設置爲2000 – mattb