1. 程式人生 > >liunx 請求服務器連接數相關設置

liunx 請求服務器連接數相關設置

客戶端連接 生效 file 想要 內存 ack 連接數 監聽 參數

一、 文件數限制修改

1、用戶級別

修改 nr_open 限制 (用途:能夠配置nofile最大數)

  cat /proc/sys/fs/nr_open

  Linux 內核 2.6.25 以前,在內核裏面宏定義是1024*1024,最大只能是100w(1048576),所以不要設置更大的值,如果Linux內核大於 2.6.25 則可以設置更大值。

當前用戶的每個進程最多允許同時打開文件限制:ulimit -n | ulimit -a

修改 limits.conf 的nofile軟硬打開文件限制(用途:tcp連接數)

vi /etc/security/limits.conf
speng soft nofile 10240
speng hard nofile 10240
其中speng 指定了要修改哪個用戶的打開文件數限制。
可用‘*‘號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即最大打開文件數(請註意軟限制值要小於或等於硬限制)。

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

文件路徑:/proc/sys/fs/file-max ,修改這個文件臨時生效
這表明這臺Linux系統最多允許同時打開(即包含所有用戶打開文件數總和)65535個文件,是Linux系統級硬限制,所有用戶級的打開文件數限制都不會超過這個數值。
通常這個系統級硬限制是Linux系統在啟動時根據系統硬件資源狀況計算出來的最佳的最大同時打開文件數限制。

vi /etc/sysctl.conf // 永久生效
fs.file-max = 1000000
立即生效:
# sysctl -p

註意:

a. 所有進程打開的文件描述符數不能超過/proc/sys/fs/file-max

b. 單個進程打開的文件描述符數不能超過user limit中nofile的soft limit

c. nofile的soft limit不能超過其hard limit

d. nofile的hard limit不能超過/proc/sys/fs/nr_open

二、 網絡端口限制修改

查看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連接。

vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_conntrack_max = 20000

配置文件生效:sudo /sbin/sysctl -p 或者 sysctl -p
如果按上述端口範圍進行設置,則理論上單獨一個進程最多可以同時建立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等文件。

Linux下查看tcp連接數及狀態命令:

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘

liunx 請求服務器連接數相關設置