服務端上查看tcp連接的建立情況,直接使用netstat命令來統計,看到了很多的time_wait狀態的連接.這些狀態是tcp連接中主動關閉的一方會出現的狀態.該服務器是nginx的webserver監聽80埠,搭配的php-fpm監聽9000埠,連接其他服務器資料庫3960埠,連接其他服務器的memcache 50028埠.
先查看本機監聽80埠的time_wait狀態,可以看到不同客戶端的ip埠,來連接我的服務端,并且是我服務端主動關閉連接,因此可以看到time_wait,這些對我們服務器沒有影響.因為這是http的短連接,肯定是會請求過來就創建一個連接,請求結束就關閉連接.
網上很多說這些如果太多會占用服務器的埠,根本就是不對的,因為這些是占用的是客戶端的埠,服務端只是一個80埠,怎么會占用服務器的埠呢.
netstat -altupn|grep ":80"

當然如果前面有負載均衡的話,客戶端IP是固定的幾個,可以把前面的負載均衡機器當成是客戶端.
當然如果我們是通過nginx的反代,反代到fpm的9000埠 , 這個時候是我們本機隨機開啟埠,連接本機的9000埠 ,這個時候是會占用本機埠數的

還有就是真正占用服務器埠的是,當需要連接資料庫時,比如我需要連接資料庫的3960埠,這個時候我的服務器會隨機占用本機的埠,連接遠程的3960埠.因為php連接資料庫是使用的短連接,每次請求都會在創建連接,并且是我服務端主動關閉的連接,所以會有大量time_wait狀態,這里會占用本機的埠數,連接mc的50028埠也是會出現同樣的情況.
netstat -altupn|grep ":3960"

那么如果php使用長連接連接資料庫呢?這個時候就是每一個fpm子行程創建一個連接,有多少個子行程就會有多少連接,并且連接是不會斷掉的.當然如果子行程的數量特別多,會占用mysql的連接數,所以這里我們的專案里也是使用的短連接.
show variables like 'max_connections'

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/122675.html
標籤:PHP
