1. 程式人生 > >Linux下TCP最大連線數受限問題

Linux下TCP最大連線數受限問題

一、 檔案數限制修改
1、使用者級別
檢視Linux系統使用者最大開啟檔案限制:
# ulimit -n
1024

(1) vi /etc/security/limits.conf
mysql soft nofile 10240
mysql hard nofile 10240
其中mysql指定了要修改哪個使用者的開啟檔案數限制。
可用'*'號表示修改所有使用者的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即最大開啟檔案數(請注意軟限制值要小於或等於硬限制)。

(2) vi /etc/pam.d/login
session required /lib/security/pam_limits.so
這是告訴Linux在使用者完成系統登入後,應該呼叫pam_limits.so模組來設定系統對該使用者可使用的各種資源數量的最大限制(包括使用者可開啟的最大檔案數限制)。
而pam_limits.so模組就會從/etc/security/limits.conf檔案中讀取配置來設定這些限制值。

2、Linux系統級別
檢視Linux系統對同時開啟檔案數的硬限制:
# sysctl -a|grep file-max
fs.file-max = 65535
這表明這臺Linux系統最多允許同時開啟(即包含所有使用者開啟檔案數總和)65535個檔案,是Linux系統級硬限制,所有使用者級的開啟檔案數限制都不會超過這個數值。
通常這個系統級硬限制是Linux系統在啟動時根據系統硬體資源狀況計算出來的最佳的最大同時開啟檔案數限制。

(1) vi /etc/sysctl.conf
fs.file-max = 1000000
立即生效:
# sysctl -p

二、 網路埠限制修改
檢視Linux系統最大追蹤TCP連線數量:
# sysctl -a | grep ipv4.ip_conntrack_max
net.ipv4.ip_conntrack_max = 20000
這表明系統將對最大跟蹤的TCP連線數限制預設為20000。

檢視Linux系統埠範圍:
# sysctl -a | grep ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 30000
注意:
每個TCP客戶端連線都要佔用一個唯一的本地埠號(此埠號在系統的本地埠號範圍限制中),如果現有的TCP客戶端連線已將所有的本地埠號佔滿。將不能建立新的TCP連線。

(1) vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024    65535
net.ipv4.ip_conntrack_max = 20000
如果按上述埠範圍進行設定,則理論上單獨一個程序最多可以同時建立60000多個TCP客戶端連線。
如果按上述引數進行設定,則理論上單獨一個程序最多可以同時建立20000多個TCP客戶端連線。


備註:
對mysql使用者可同時開啟檔案數設定為10240個;
將Linux系統可同時開啟檔案數設定為1000000個(一定要大於對使用者的同時開啟檔案數限制);
將Linux系統對最大追蹤的TCP連線數限制為20000個(但是,建議設定為10240;因為對mysql使用者的同時開啟檔案數已經限制在10240個;且較小的值可以節省記憶體);
將linux系統埠範圍配置為1024~30000(可以支援60000個以上連線,不建議修改;預設已經支援20000個以上連線);

綜合上述四點,TCP連線數限制在10140個。
這10240個檔案中還得除去每個程序必然開啟的標準輸入,標準輸出,標準錯誤,伺服器監聽 socket,程序間通訊的unix域socket等檔案。


因此,當需要對TCP連線數進行調整時只需要調整ulimit引數。


Linux下檢視tcp連線數及狀態命令:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
---------------------  
作者:duan19056  
來源:CSDN  
原文:https://blog.csdn.net/duan19056/article/details/51210110  
版權宣告:本文為博主原創文章,轉載請附上博文連結!