[PHP] time_wait與長鏈接短鏈接

服務端上查看tcp鏈接的創建狀況,直接使用netstat命令來統計,看到了不少的time_wait狀態的鏈接.這些狀態是tcp鏈接中主動關閉的一方會出現的狀態.該服務器是nginx的webserver監聽80端口,搭配的php-fpm監聽9000端口,鏈接其餘服務器數據庫3960端口,鏈接其餘服務器的memcache 50028端口.php

 

先查看本機監聽80端口的time_wait狀態,能夠看到不一樣客戶端的ip端口,來鏈接個人服務端,而且是我服務端主動關閉鏈接,所以能夠看到time_wait,這些對咱們服務器沒有影響.由於這是http的短鏈接,確定是會請求過來就建立一個鏈接,請求結束就關閉鏈接.mysql

網上不少說這些若是太多會佔用服務器的端口,根本就是不對的,由於這些是佔用的是客戶端的端口,服務端只是一個80端口,怎麼會佔用服務器的端口呢.
netstat -altupn|grep ":80"nginx

 

 固然若是前面有負載均衡的話,客戶端IP是固定的幾個,能夠把前面的負載均衡機器當成是客戶端.web

 

固然若是咱們是經過nginx的反代,反代到fpm的9000端口 , 這個時候是咱們本機隨機開啓端口,鏈接本機的9000端口 ,這個時候是會佔用本機端口數的sql

 

 

 

還有就是真正佔用服務器端口的是,當須要鏈接數據庫時,好比我須要鏈接數據庫的3960端口,這個時候個人服務器會隨機佔用本機的端口,鏈接遠程的3960端口.由於php鏈接數據庫是使用的短鏈接,每次請求都會在建立鏈接,而且是我服務端主動關閉的鏈接,因此會有大量time_wait狀態,這裏會佔用本機的端口數,鏈接mc的50028端口也是會出現一樣的狀況.
netstat -altupn|grep ":3960"數據庫

 

 

那麼若是php使用長鏈接鏈接數據庫呢?這個時候就是每個fpm子進程建立一個鏈接,有多少個子進程就會有多少鏈接,而且鏈接是不會斷掉的.固然若是子進程的數量特別多,會佔用mysql的鏈接數,因此這裏咱們的項目裏也是使用的短鏈接.
show variables like 'max_connections'服務器

相關文章
相關標籤/搜索