ubuntu下解決高並發socket最大連接數限制,tcp默認1024個連接


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM