溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置

發(fā)布時(shí)間:2021-07-20 18:08:50 來(lái)源:億速云 閱讀:289 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!


【訴求場(chǎng)景】

Linux操作系統(tǒng),無(wú)論是編寫(xiě)客戶(hù)端程序還是服務(wù)端程序,在高并發(fā)TCP連接處理時(shí),最高的并發(fā)數(shù)量都要受到系統(tǒng)對(duì)用戶(hù)單一進(jìn)程同時(shí)可打開(kāi)文件數(shù)量的限制(因?yàn)橄到y(tǒng)為每個(gè)TCP連接都要?jiǎng)?chuàng)建一個(gè)socket句柄,每個(gè)socket句柄同時(shí)也是一個(gè)文件句柄)。

本文檔主要是對(duì)文件數(shù)量并發(fā)限制做修改。

【配置方法】

1、修改用戶(hù)進(jìn)程可打開(kāi)文件數(shù)限制,如圖所示:

Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置

說(shuō)明:

ulimit –n :查看當(dāng)前系統(tǒng)允許當(dāng)前用戶(hù)進(jìn)程打開(kāi)的文件數(shù)限制。

默認(rèn)為1024:表示當(dāng)前用戶(hù)的每個(gè)進(jìn)程最多允許同時(shí)打開(kāi)1024個(gè)文件。

這1024個(gè)文件中還得去除每個(gè)進(jìn)程打開(kāi)的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤、服務(wù)器監(jiān)聽(tīng)socket等等,剩下的可用于客戶(hù)端socket連接的文件數(shù)就只有

1024-10=1014個(gè)左右,也就是基于Linux的程序最多允許同時(shí)1014個(gè)TCP并發(fā)連接。

(1)修改Linux系統(tǒng)對(duì)用戶(hù)打開(kāi)軟限制和硬限制,如圖所示:

vim /etc/security/limits.conf

添加 root soft nofile 1921

root hard nofile 1921

Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置

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

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

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

Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置

說(shuō)明:Linux在用戶(hù)登錄系統(tǒng)后應(yīng)該調(diào)用pam_limits.so模塊來(lái)設(shè)置系統(tǒng)對(duì)該用戶(hù)可使用的各種資源數(shù)量的最大限制(包括用戶(hù)可打開(kāi)的最大文件數(shù)限制),

pam_limits.so模塊就會(huì)從/etc/security/limits.conf文件中來(lái)讀取這個(gè)這些限制值

(3)查看linux系統(tǒng)級(jí)最大打開(kāi)文件數(shù)限制cat /proc/sys/fs/file-max,如圖所示:

Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置

說(shuō)明:這表示linux系統(tǒng)最多同時(shí)允許打開(kāi)(包括所有用戶(hù)打開(kāi)文件數(shù)的總和)96854個(gè)文件,是linux系統(tǒng)級(jí)的硬限制,所有用戶(hù)打開(kāi)的文件數(shù)都不得超過(guò)這個(gè)數(shù)值, 一般不修改這個(gè)值,如果想修改,命令為vim /etc/rc.local。

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

Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置

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

(6)上面操作可以解決高并發(fā)TCP連接處理打開(kāi)文件數(shù)量的系統(tǒng)限制。

有時(shí)盡管解開(kāi)了系統(tǒng)對(duì)用戶(hù)同時(shí)打開(kāi)文件數(shù)的限制,但仍會(huì)出現(xiàn)并發(fā)TCP連接數(shù)增加到一定數(shù)量時(shí),再也無(wú)法創(chuàng)建新的TCP連接的現(xiàn)象。

2、linux網(wǎng)絡(luò)內(nèi)核對(duì)本地端口號(hào)范圍有限制,例如當(dāng)前系統(tǒng)內(nèi)核限制本地端口號(hào)的范圍為 1024-32768,當(dāng)系統(tǒng)同一時(shí)間存在大量的TCP客戶(hù)端連接時(shí),由于每個(gè)TCP客戶(hù)端都要占據(jù)一個(gè)唯一的本地端口號(hào),如果TCP端口號(hào)的范圍不夠用,就會(huì)提示 :can't assign requested address ,這就是由于內(nèi)核編譯時(shí)默認(rèn)設(shè)置的本地端口號(hào)范圍太小。

修改:/etc/sysctl.conf

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

執(zhí)行:sysctl –p,如果沒(méi)有報(bào)錯(cuò),說(shuō)明設(shè)置成功,顯示內(nèi)容包含圖中的內(nèi)容:

Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置

以上是單獨(dú)一個(gè)進(jìn)程最大同時(shí)可以打開(kāi)63000多個(gè)TCP客戶(hù)端連接的設(shè)置。

“Linux下怎么實(shí)現(xiàn)高并發(fā)socket最大連接數(shù)的配置”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI