linux系統默認ulimit為1024個訪問 用戶最多可開啟的程序數目。一般一個端口(即一個進程)的最高連接為2的16次方65536
通過這個命令 ulimit -n 可以看到默認值為1024
查看全局文件句柄數限制(系統支持的最大值)
cat /proc/sys/fs/file-max
查看每個進程文件句柄數限制
ulimit -n
第一步,修改/etc/security/limits.conf文件,在文件中添加如下行(*指代系統用戶名),修改Linux系統對用戶的關於打開文件數的軟限制和硬限制
root soft nofile 65536 root hard nofile 65536 root soft nproc 65535 root hard nproc 65535 jest soft core 102400 jest hard core 102400 jest soft nofile 65536 jest hard nofile 65536 jest soft nproc 65535 jest hard nproc 65535 jest soft stack 10204 jest hard stack 32768
第二步,修改/etc/pam.d/su 、/etc/pam.d/common-session、/etc/pam.d/login,在文件中添加如下行:
sudo vim /etc/pam.d/su
將 pam_limits.so 這一行注釋去掉 ,保存修改
重起系統
sudo vim /etc/pam.d/common-session
加上以下一行並保存
session required pam_limits.so
打開/etc/pam.d/su,發現是包含/etc/pam.d/common-session這個文件的,所以修改哪個文件都應該是可以的
這個覺得修改su這個文件比較好,取消注釋就OK了,不容易出錯。
session required /lib/security/pam_limits.so
#如果是64bit系統的話,應該為 :
session required /lib64/security/pam_limits.so
第三步,修改/etc/sysctl.conf文件,在文件中(清除文件原始內容(或者在原有的基礎上添加,我是這么干的))添加如下行(修改網絡內核對TCP連接的有關限制)。
net.ipv4.ip_local_port_range = 1024 65535 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_window_scaling = 0 net.ipv4.tcp_sack = 0 net.core.netdev_max_backlog = 30000 net.ipv4.tcp_no_metrics_save=1 net.core.somaxconn = 262144 net.ipv4.tcp_syncookies = 0 net.ipv4.tcp_max_orphans = 262144 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2
第四步,執行如下命令(使上述設置生效):
/sbin/sysctl -p /etc/sysctl.conf
/sbin/sysctl -w net.ipv4.route.flush=1
第五步,執行如下命令(linux系統優化完網絡必須調高系統允許打開的文件數才能支持大的並發,默認1024是遠遠不夠的):
echo "ulimit -HSn 65535" >> /etc/rc.local echo "ulimit -HSn 65535" >>/root/.bash_profile echo "ulimit -SHn 65535" >> /etc/profile ulimit -SHn 65535
第六步,重啟機器
通過修改,tcp可以達到65535個連接完全沒有問題
通過這個命令 ulimit -n 可以看到值改為65535了,也就是說現在最多支持65536個tcp socket連接了
查看當前有多少個TCP連接到當前服務器命令:netstat -antp |grep -i est |wc -l