實戰解讀丨Linux下實現高並發socket最大連接數的配置方法


摘要:Linux操作系統,無論是編寫客戶端程序還是服務端程序,在高並發TCP連接處理時,最高的並發數量都要受到系統對用戶單一進程同時可打開文件數量的限制。

【訴求場景】

Linux操作系統,無論是編寫客戶端程序還是服務端程序,在高並發TCP連接處理時,最高的並發數量都要受到系統對用戶單一進程同時可打開文件數量的限制(因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)。

本文檔主要是對文件數量並發限制做修改。

【配置方法】

1、修改用戶進程可打開文件數限制,如圖所示:

說明:

ulimit –n :查看當前系統允許當前用戶進程打開的文件數限制。

默認為1024:表示當前用戶的每個進程最多允許同時打開1024個文件。

這1024個文件中還得去除每個進程打開的標准輸入、標准輸出、標准錯誤、服務器監聽socket等等,剩下的可用於客戶端socket連接的文件數就只有

1024-10=1014個左右,也就是基於Linux的程序最多允許同時1014個TCP並發連接。

(1)修改Linux系統對用戶打開軟限制和硬限制,如圖所示:

vim /etc/security/limits.conf

添加 root soft nofile 1921

root hard nofile 1921

說明:root代表修改了root用戶打開文件的數的限制,可以用“*”代表所有用戶soft和hard指定要修改的軟限制還是硬限制。1921指定修改的新限制值,也就是最大打開的文件數(軟限制一定要小於或等於硬限制)

(2)修改 /etc/pam.d/login文件,如圖所示:

添加:session required /lib/security/pam_limits.so

說明:Linux在用戶登錄系統后應該調用pam_limits.so模塊來設置系統對該用戶可使用的各種資源數量的最大限制(包括用戶可打開的最大文件數限制),

pam_limits.so模塊就會從/etc/security/limits.conf文件中來讀取這個這些限制值

(3)查看linux系統級最大打開文件數限制cat /proc/sys/fs/file-max,如圖所示:

說明:這表示linux系統最多同時允許打開(包括所有用戶打開文件數的總和)96854個文件,是linux系統級的硬限制,所有用戶打開的文件數都不得超過這個數值, 一般不修改這個值,如果想修改,命令為vim /etc/rc.local。

(4)添加:echo 數值 > /proc/sys/fs/file-max,修改完重啟系統,重啟后執行ulimit –n查看一下,如圖所示:

(5)如果重啟后執行ulimit –n查看的值還是小於上面修改后的最大值,可能是用戶登錄腳本/etc/profile中使用ulimit –n命令,已將用戶同時打開的文件數做了限制,只能在/etc/profile找到ulimit –n限制用戶同時打開的最大文件數,可以刪除也可以修改值,重啟系統即可。

(6)上面操作可以解決高並發TCP連接處理打開文件數量的系統限制。

有時盡管解開了系統對用戶同時打開文件數的限制,但仍會出現並發TCP連接數增加到一定數量時,再也無法創建新的TCP連接的現象。

2、linux網絡內核對本地端口號范圍有限制,例如當前系統內核限制本地端口號的范圍為 1024-32768,當系統同一時間存在大量的TCP客戶端連接時,由於每個TCP客戶端都要占據一個唯一的本地端口號,如果TCP端口號的范圍不夠用,就會提示 :can't assign requested address ,這就是由於內核編譯時默認設置的本地端口號范圍太小。

修改:/etc/sysctl.conf

添加:net.ipv4.ip_local_port_range = 1024 65535(最大值要小於或等於65535)

執行:sysctl –p,如果沒有報錯,說明設置成功,顯示內容包含圖中的內容:

以上是單獨一個進程最大同時可以打開63000多個TCP客戶端連接的設置。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

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



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