您好,登錄后才能下訂單哦!
本篇內容介紹了“Linux下怎么實現高并發socket最大連接數的配置”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
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客戶端連接的設置。
“Linux下怎么實現高并發socket最大連接數的配置”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。