知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
上面解釋了伺服器端與客戶端,伺服器能開出的連接埠數量會影響最終連接數的數量。除此之外還有哪些因素呢?
檔案打開數量,還以WEB伺服器為例,瀏覽器請求HTML資源,Nginx 會到磁碟上索引對應的檔案並打開,將檔案內容讀到內存,並返回給瀏覽器。如果係統限制了檔案打開數量,Socket 請求仍會失敗。如果是 Unix Socket 檔案打開數量限制,直接影響 Socket 連接數。
磁碟IO性能,多綫程打開檔案太多,導致讀取問題等待時間過長,造成綫程堆積。
內存限制,伺服器端每接受一個TCP連接請求,就會為多綫程/進程分配內存空間。如果限制了進城的內存空間,內存不足,綫程創建失敗。也就是意味着無法再有新連結進入伺服器。
進程數限制,這個因素只影響機遇多進程的TCP Socket,對於多綫程TCP Socket 不影響。
網卡的頻寬,每個TCP 連結請求產生多少頻寬,全負荷工作時頻寬開銷時多少,一般網卡時1GB,如果超過1GB,外面的連結也是會超時的。目前光纖網卡主流40GB 性價比比較高。
網絡設備,交換機容量和背板頻寬,從客戶端到伺服器端,需要經過交換機,交換機的交換能力,和背板頻寬(交換機內存)決定了你從客戶能發出多少連結,伺服器端能接受多少連結。交換機不給力,並發就上不去。還有路由器或防火牆的會話數,這部分請參看《多維度架構之會話數》
以上設置通過 ulimit / sysctl 兩個命令完成內核參數的調整。這裡不多介紹,有興趣看筆者相關文章,如果比較懶可以到我的知乎主頁,點付費諮詢。