
服務(wù)器最?TCP連接數(shù)及調(diào)優(yōu)匯總
啟動線程數(shù):
啟動線程數(shù)=【任務(wù)執(zhí)?時間/(任務(wù)執(zhí)?時間-IO等待時間)】*CPU內(nèi)核數(shù)
最佳啟動線程數(shù)和CPU內(nèi)核數(shù)量成正?,和IO阻塞時間成反?。如果任務(wù)都是CPU計算型任務(wù),那么線程數(shù)最多不超過CPU內(nèi)核數(shù),因為
啟動再多線程,CPU也來不及調(diào)度;相反如果是任務(wù)需要等待磁盤操作,?絡(luò)響應(yīng),那么多啟動線程有助于提?任務(wù)并發(fā)度,提?系統(tǒng)吞吐
能?,改善系統(tǒng)性能。
單機最?tcp連接數(shù)
?絡(luò)編程
在tcp應(yīng)?中,rver事先在某個固定端?監(jiān)聽,client主動發(fā)起連接,經(jīng)過三路握?后建?tcp連接。那么對單機,其最?并發(fā)tcp連接數(shù)是多
少?
如何標識?個TCP連接
在確定最?連接數(shù)之前,先來看看系統(tǒng)如何標識?個tcp連接。系統(tǒng)??個4四元組來唯?標識?個TCP連接:{localip,localport,remote
ip,remoteport}。
client最?tcp連接數(shù)
client每次發(fā)起tcp連接請求時,除?綁定端?,通常會讓系統(tǒng)選取?個空閑的本地端?(localport),該端?是獨占的,不能和其他tcp連接
共享。tcp端?的數(shù)據(jù)類型是unsignedshort,因此本地端?個數(shù)最?只有65536,端?0有特殊含義,不能使?,這樣可?端?最多只有
65535,所以在全部作為client端的情況下,最?tcp連接數(shù)為65535,這些連接可以連到不同的rverip。
rver最?tcp連接數(shù)
rver通常固定在某個本地端?上監(jiān)聽,等待client的連接請求。不考慮地址重?(unix的SO_REUSEADDR選項)的情況下,即使rver端
有多個ip,本地監(jiān)聽端?也是獨占的,因此rver端tcp連接4元組中只有remoteip(也就是clientip)和remoteport(客戶端port)是可變
的,因此最?tcp連接為客戶端ip數(shù)×客戶端port數(shù),對IPV4,不考慮ip地址分類等因素,最?tcp連接數(shù)約為2的32次?(ip數(shù))×2的16次?
(port數(shù)),也就是rver端單機最?tcp連接數(shù)約為2的48次?。
實際的tcp連接數(shù)
上?給出的是理論上的單機最?連接數(shù),在實際環(huán)境中,受到機器資源、操作系統(tǒng)等的限制,特別是ver端,其最?并發(fā)tcp連接數(shù)遠不能
達到理論上限。在unix/linux下限制連接數(shù)的主要因素是內(nèi)存和允許的?件描述符個數(shù)(每個tcp連接都要占??定內(nèi)存,每個socket就是?
個?件描述符),另外1024以下的端?通常為保留端?。在默認2.6內(nèi)核配置下,經(jīng)過試驗,每個socket占?內(nèi)存在15~20k之間。
影響?個socket占?內(nèi)存的參數(shù)包括:
rmem_max
wmem_max
tcp_rmem
tcp_wmem
tcp_mem
grepskbuff/proc/slabinfo
對rver端,通過增加內(nèi)存、修改最??件描述符個數(shù)等參數(shù),單機最?并發(fā)TCP連接數(shù)超過10萬是沒問題的,國外UrbanAirship公司在
產(chǎn)品環(huán)境中已做到50萬并發(fā)。在實際應(yīng)?中,對?規(guī)模?絡(luò)應(yīng)?,還需要考慮C10K問題。
原?:
曾?何時我們還在尋求?絡(luò)編程中問題的解決?案,但是現(xiàn)在從硬件和操作系統(tǒng)?持來看單臺服務(wù)器?持上萬并發(fā)連接已經(jīng)沒有多少挑戰(zhàn)性
了。
我們先假設(shè)單臺服務(wù)器最多只能?持萬級并發(fā)連接,其實對絕?多數(shù)應(yīng)?來說已經(jīng)遠遠?夠了,但是對于?些擁有很??戶基數(shù)的互聯(lián)?公
司,往往?臨的并發(fā)連接數(shù)是百萬,千萬,甚?騰訊的上億(注:QQ默認?的UDP協(xié)議)。雖然現(xiàn)在的集群,分布式技術(shù)可以為我們將并
發(fā)負載分擔(dān)在多臺服務(wù)器上,那我們只需要擴展出數(shù)?臺電腦就可以解決問題,但是我們更希望能更?的挖掘單臺服務(wù)器的資源,先努?垂
直擴展,再進??平擴展,這樣可以有效的節(jié)省服務(wù)器相關(guān)的開?(硬件資源,機房,運維,電?其實也是?筆不?的開?)。
那么到底?臺服務(wù)器能夠?持多少TCP并發(fā)連接呢?
常識?:?件句柄限制
在linux下編寫?絡(luò)服務(wù)器程序的朋友肯定都知道每?個tcp連接都要占?個?件描述符,?旦這個?件描述符使?完了,新的連接到來返回
給我們的錯誤是“Socket/File:Can'topensomanyfiles”。
這時你需要明?操作系統(tǒng)對可以打開的最??件數(shù)的限制。
進程限制
執(zhí)?ulimit-n輸出1024,說明對于?個進程??最多只能打開1024個?件,所以你要采?此默認配置最多也就可以并發(fā)上千個
TCP連接。
臨時修改:ulimit-n1000000,但是這種臨時修改只對當(dāng)前登錄?戶?前的使?環(huán)境有效,系統(tǒng)重啟或?戶退出后就會失效。
重啟后失效的修改(不過我在CentOS6.5下測試,重啟后未發(fā)現(xiàn)失效):編輯/etc/curity/?件,修改后內(nèi)容為
*softnofile1000000
*hardnofile1000000
永久修改:編輯/etc/,在其后添加如下內(nèi)容
ulimit-SHn1000000
全局限制
執(zhí)?cat/proc/sys/fs/file-nr輸出93440592026,分別為:1.已經(jīng)分配的?件句柄數(shù),2.已經(jīng)分配但沒有使?的?件句柄數(shù),3.最?
?件句柄數(shù)。但在kernel2.6版本中第?項的值總為0,這并不是?個錯誤,它實際上意味著已經(jīng)分配的?件描述符??浪費的都
已經(jīng)被使?了。
我們可以把這個數(shù)值改?些,?root權(quán)限修改/etc/?件:
-max=1000000
_conntrack_max=1000000
_conntrack_max=1000000
常識?:端?號范圍限制?
操作系統(tǒng)上端?號1024以下是系統(tǒng)保留的,從1024-65535是?戶使?的。由于每個TCP連接都要占?個端?號,所以我們最多可以有
60000多個并發(fā)連接。我想有這種錯誤思路朋友不在少數(shù)吧?(其中我過去就?直這么認為)
我們來分析?下吧
如何標識?個TCP連接:系統(tǒng)??個4四元組來唯?標識?個TCP連接:{localip,localport,remoteip,remoteport}。好吧,我們拿出
《UNIX?絡(luò)編程:卷?》第四章中對accept的講解來看看概念性的東西,第?個參數(shù)cliaddr代表了客戶端的ip地址和端?號。?我們
作為服務(wù)端實際只使?了bind時這?個端?,說明端?號65535并不是并發(fā)量的限制。
rver最?tcp連接數(shù):rver通常固定在某個本地端?上監(jiān)聽,等待client的連接請求。不考慮地址重?(unix的SO_REUSEADDR選
項)的情況下,即使rver端有多個ip,本地監(jiān)聽端?也是獨占的,因此rver端tcp連接4元組中只有remoteip(也就是clientip)和
remoteport(客戶端port)是可變的,因此最?tcp連接為客戶端ip數(shù)×客戶端port數(shù),對IPV4,不考慮ip地址分類等因素,最?tcp連接
數(shù)約為2的32次?(ip數(shù))×2的16次?(port數(shù)),也就是rver端單機最?tcp連接數(shù)約為2的48次?。
總結(jié)
TCP/IP協(xié)議規(guī)定的,只?了2個字節(jié)表?端?號。容易讓?誤解為1個rver只允許連接65535個Client。
typedefstruct_NETWORK_ADDRESS_IP
{
USHORTsin_port;//0~65535
ULONGin_addr;
UCHARsin_zero[8];
}NETWORK_ADDRESS_IP,*PNETWORK_ADDRESS_IP;
(1)其實65535這個數(shù)字,只是決定了服務(wù)器端最多可以擁有65535個Bind的Socket。也就是說,最多可以開65535個服務(wù)器進程,但是你要
知道這個能夠連接客戶端的數(shù)量沒有任何關(guān)系,Accept過來的Socket是不需要Bind任何IP地址的,也沒有端?占?這?說。作為Server端的
Socket本?只負責(zé)監(jiān)聽和接受連接操作。
(2)TCP協(xié)議??是?[源IP+源Port+?的IP+?的Port]來區(qū)別兩個不同連接,所以連?和連出是兩個不同的概念。連出Connect就不錯了,需要
?成隨機端?,這個是有限的連?的話,因SOCKET的分配受內(nèi)存分頁限制,?連接受限制(WINDOWS)。
(3)所以,千萬不要誤以為1個rver只允許連接65535個Client。記住,TCP連出受端?限制,連?僅受內(nèi)存限制。
例如rver,IP:192.168.16.254,Port:8009
Client1:IP:192.168.16.1,Port:2378
Client2:IP:192.168.16.2,Port:2378
Client1和Client2雖然Port相同,但是IP不同,所以是不同的連接。
(4)想讓1個rver并發(fā)?效得連接?萬個Client,需要使?IOCP“完成端?(CompletionPort)”的技術(shù)。
上?給出的結(jié)論都是理論上的單機TCP并發(fā)連接數(shù),實際上單機并發(fā)連接數(shù)肯定要受硬件資源(內(nèi)存)、?絡(luò)資源(帶寬)的限制,?少對
我們的需求現(xiàn)在可以做到數(shù)?萬級的并發(fā)了,你的呢?
常見設(shè)置
1、修改?戶進程可打開?件數(shù)限制
在Linux平臺上,?論編寫客戶端程序還是服務(wù)端程序,在進??并發(fā)TCP連接處理時,最?的并發(fā)數(shù)量都要受到系統(tǒng)對?戶單?進程同時
可打開?件數(shù)量的限制(這是因為系統(tǒng)為每個TCP連接都要創(chuàng)建?個socket句柄,每個socket句柄同時也是?個?件句柄)。可使?ulimit命令
查看系統(tǒng)允許當(dāng)前?戶進程打開的?件數(shù)限制:
[speng@as4~]$ulimit-n
1024
這表?當(dāng)前?戶的每個進程最多允許同時打開1024個?件,這1024個?件中還得除去每個進程必然打開的標準輸?,標準輸出,標準錯
誤,服務(wù)器監(jiān)聽socket,進程間通訊的unix域socket等?件,那么剩下的可?于客戶端socket連接的?件數(shù)就只有?概1024-10=1014個左
右。也就是說缺省情況下,基于Linux的通訊程序最多允許同時1014個TCP并發(fā)連接。
對于想?持更?數(shù)量的TCP并發(fā)連接的通訊處理程序,就必須修改Linux對當(dāng)前?戶的進程同時打開的?件數(shù)量的軟限制(softlimit)和硬限制
(hardlimit)。其中軟限制是指Linux在當(dāng)前系統(tǒng)能夠承受的范圍內(nèi)進?步限制?戶同時打開的?件數(shù);硬限制則是根據(jù)系統(tǒng)硬件資源狀況(主要
是系統(tǒng)內(nèi)存)計算出來的系統(tǒng)最多可同時打開的?件數(shù)量。通常軟限制?于或等于硬限制。
修改上述限制的最簡單的辦法就是使?ulimit命令:
[speng@as4~]$ulimit-n
上述命令中,在中指定要設(shè)置的單?進程允許打開的最??件數(shù)。如果系統(tǒng)回顯類似于“Operationnotpermitted”之類的話,說明上述限制修
改失敗,實際上是因為在中指定的數(shù)值超過了Linux系統(tǒng)對該?戶打開?件數(shù)的軟限制或硬限制。因此,就需要修改Linux系統(tǒng)對?戶的關(guān)于
打開?件數(shù)的軟限制和硬限制。
第?步,修改/etc/curity/?件,在?件中添加如下?:
...
#Endoffile
spengsoftnofile10240
spenghardnofile10240
rootsoftnofile65535
roothardnofile65535
*softnofile65535
*hardnofile65535
[test@iZwz9e1dh1nweaex8ob5b7Zconfig]$
其中speng指定了要修改哪個?戶的打開?件數(shù)限制,可?’*'號表?修改所有?戶的限制;soft或hard指定要修改軟限制還是硬限制;10240
則指定了想要修改的新的限制值,即最?打開?件數(shù)(請注意軟限制值要?于或等于硬限制)。修改完后保存?件。
第?步,修改/etc/pam.d/login?件,在?件中添加如下?:
ssionrequired/lib/curity/pam_
這是告訴Linux在?戶完成系統(tǒng)登錄后,應(yīng)該調(diào)?pam_模塊來設(shè)置系統(tǒng)對該?戶可使?的各種資源數(shù)量的最?限制(包括?戶可打開
的最??件數(shù)限制),?pam_模塊就會從/etc/curity/?件中讀取配置來設(shè)置這些限制值。修改完后保存此?件。
第三步,查看Linux系統(tǒng)級的最?打開?件數(shù)限制,使?如下命令:
[speng@as4~]$cat/proc/sys/fs/file-max
12158
這表明這臺Linux系統(tǒng)最多允許同時打開(即包含所有?戶打開?件數(shù)總和)12158個?件,是Linux系統(tǒng)級硬限制,所有?戶級的打開?件數(shù)
限制都不應(yīng)超過這個數(shù)值。通常這個系統(tǒng)級硬限制是Linux系統(tǒng)在啟動時根據(jù)系統(tǒng)硬件資源狀況計算出來的最佳的最?同時打開?件數(shù)限
制,如果沒有特殊需要,不應(yīng)該修改此限制,除?想為?戶級打開?件數(shù)限制設(shè)置超過此限制的值。修改此硬限制的?法是修改/etc/
腳本,在腳本中添加如下?:
echo22158>/proc/sys/fs/file-max
這是讓Linux在啟動完成后強?將系統(tǒng)級打開?件數(shù)硬限制設(shè)置為22158。修改完后保存此?件。
完成上述步驟后重啟系統(tǒng),?般情況下就可以將Linux系統(tǒng)對指定?戶的單?進程允許同時打開的最??件數(shù)限制設(shè)為指定的數(shù)值。如果重
啟后?ulimit-n命令查看?戶可打開?件數(shù)限制仍然低于上述步驟中設(shè)置的最?值,這可能是因為在?戶登錄腳本/etc/profile中使?ulimit-n
命令已經(jīng)將?戶可同時打開的?件數(shù)做了限制。由于通過ulimit-n修改系統(tǒng)對?戶可同時打開?件的最?數(shù)限制時,新修改的值只能?于或等
于上次ulimit-n設(shè)置的值,因此想?此命令增?這個限制值是不可能的。所以,如果有上述問題存在,就只能去打開/etc/profile腳本?件,在
?件中查找是否使?了ulimit-n限制了?戶可同時打開的最??件數(shù)量,如果找到,則刪除這?命令,或者將其設(shè)置的值改為合適的值,然后
保存?件,?戶退出并重新登錄系統(tǒng)即可。
通過上述步驟,就為?持?并發(fā)TCP連接處理的通訊處理程序解除關(guān)于打開?件數(shù)量??的系統(tǒng)限制。
2、修改?絡(luò)內(nèi)核對TCP連接的有關(guān)限制(參考對?下篇?章“優(yōu)化內(nèi)核參數(shù)”)
在Linux上編寫?持?并發(fā)TCP連接的客戶端通訊處理程序時,有時會發(fā)現(xiàn)盡管已經(jīng)解除了系統(tǒng)對?戶同時打開?件數(shù)的限制,但仍會出現(xiàn)
并發(fā)TCP連接數(shù)增加到?定數(shù)量時,再也?法成功建?新的TCP連接的現(xiàn)象。出現(xiàn)這種現(xiàn)在的原因有多種。
第?種原因可能是因為Linux?絡(luò)內(nèi)核對本地端?號范圍有限制。此時,進?步分析為什么?法建?TCP連接,會發(fā)現(xiàn)問題出在connect()調(diào)
?返回失敗,查看系統(tǒng)錯誤提?消息是“Can’tassignrequestedaddress”。同時,如果在此時?tcpdump?具監(jiān)視?絡(luò),會發(fā)現(xiàn)根本沒有
TCP連接時客戶端發(fā)SYN包的?絡(luò)流量。這些情況說明問題在于本地Linux系統(tǒng)內(nèi)核中有限制。其實,問題的根本原因在于Linux內(nèi)核的
TCP/IP協(xié)議實現(xiàn)模塊對系統(tǒng)中所有的客戶端TCP連接對應(yīng)的本地端?號的范圍進?了限制(例如,內(nèi)核限制本地端?號的范圍為1024~32768
之間)。當(dāng)系統(tǒng)中某?時刻同時存在太多的TCP客戶端連接時,由于每個TCP客戶端連接都要占??個唯?的本地端?號(此端?號在系統(tǒng)的
本地端?號范圍限制中),如果現(xiàn)有的TCP客戶端連接已將所有的本地端?號占滿,則此時就?法為新的TCP客戶端連接分配?個本地端?
號了,因此系統(tǒng)會在這種情況下在connect()調(diào)?中返回失敗,并將錯誤提?消息設(shè)為“Can’tassignrequestedaddress”。有關(guān)這些控制邏輯
可以查看Linux內(nèi)核源代碼,以linux2.6內(nèi)核為例,可以查看tcp_ipv4.c?件中如下函數(shù):
staticinttcp_v4_hash_connect(structsock*sk)
請注意上述函數(shù)中對變量sysctl_local_port_range的訪問控制。變量sysctl_local_port_range的初始化則是在tcp.c?件中的如下函數(shù)中設(shè)置:
void__inittcp_init(void)
內(nèi)核編譯時默認設(shè)置的本地端?號范圍可能太?,因此需要修改此本地端?范圍限制。
第?步,修改/etc/?件,在?件中添加如下?:
_local_port_range=102465000
這表明將系統(tǒng)對本地端?范圍限制設(shè)置為1024~65000之間。請注意,本地端?范圍的最?值必須?于或等于1024;?端?范圍的最?值則
應(yīng)?于或等于65535。修改完后保存此?件。
第?步,執(zhí)?sysctl命令:
[speng@as4~]$sysctl-p
如果系統(tǒng)沒有錯誤提?,就表明新的本地端?范圍設(shè)置成功。如果按上述端?范圍進?設(shè)置,則理論上單獨?個進程最多可以同時建?
60000多個TCP客戶端連接。
第?種?法建?TCP連接的原因可能是因為Linux?絡(luò)內(nèi)核的IP_TABLE防?墻對最?跟蹤的TCP連接數(shù)有限制。此時程序會表現(xiàn)為在
connect()調(diào)?中阻塞,如同死機,如果?tcpdump?具監(jiān)視?絡(luò),也會發(fā)現(xiàn)根本沒有TCP連接時客戶端發(fā)SYN包的?絡(luò)流量。由于
IP_TABLE防?墻在內(nèi)核中會對每個TCP連接的狀態(tài)進?跟蹤,跟蹤信息將會放在位于內(nèi)核內(nèi)存中的conntrackdataba中,這個數(shù)據(jù)庫的?
?有限,當(dāng)系統(tǒng)中存在過多的TCP連接時,數(shù)據(jù)庫容量不?,IP_TABLE?法為新的TCP連接建?跟蹤信息,于是表現(xiàn)為在connect()調(diào)?中
阻塞。此時就必須修改內(nèi)核對最?跟蹤的TCP連接數(shù)的限制,?法同修改內(nèi)核對本地端?號范圍的限制是類似的:
第?步,修改/etc/?件,在?件中添加如下?:
_conntrack_max=10240
這表明將系統(tǒng)對最?跟蹤的TCP連接數(shù)限制設(shè)置為10240。請注意,此限制值要盡量?,以節(jié)省對內(nèi)核內(nèi)存的占?。
第?步,執(zhí)?sysctl命令:
[speng@as4~]$sysctl-p
如果系統(tǒng)沒有錯誤提?,就表明系統(tǒng)對新的最?跟蹤的TCP連接數(shù)限制修改成功。如果按上述參數(shù)進?設(shè)置,則理論上單獨?個進程最多可
以同時建?10000多個TCP客戶端連接。
3、使??持?并發(fā)?絡(luò)I/O的編程技術(shù)
在Linux上編寫?并發(fā)TCP連接應(yīng)?程序時,必須使?合適的?絡(luò)I/O技術(shù)和I/O事件分派機制。
可?的I/O技術(shù)有同步I/O,?阻塞式同步I/O(也稱反應(yīng)式I/O),以及異步I/O。《》
在?TCP并發(fā)的情形下,如果使?同步I/O,這會嚴重阻塞程序的運轉(zhuǎn),除?為每個TCP連接的I/O創(chuàng)建?個線程。但是,過多的線程?會因
系統(tǒng)對線程的調(diào)度造成巨?開銷。因此,在?TCP并發(fā)的情形下使?同步I/O是不可取的,這時可以考慮使??阻塞式同步I/O或異步I/O。?
阻塞式同步I/O的技術(shù)包括使?lect(),poll(),epoll等機制。異步I/O的技術(shù)就是使?AIO。
從I/O事件分派機制來看,使?lect()是不合適的,因為它所?持的并發(fā)連接數(shù)有限(通常在1024個以內(nèi))。如果考慮性能,poll()也是不合適
的,盡管它可以?持的較?的TCP并發(fā)數(shù),但是由于其采?“輪詢”機制,當(dāng)并發(fā)數(shù)較?時,其運?效率相當(dāng)?shù)停⒖赡艽嬖贗/O事件分派不
均,導(dǎo)致部分TCP連接上的I/O出現(xiàn)“饑餓”現(xiàn)象。?如果使?epoll或AIO,則沒有上述問題(早期Linux內(nèi)核的AIO技術(shù)實現(xiàn)是通過在內(nèi)核中為每
個I/O請求創(chuàng)建?個線程來實現(xiàn)的,這種實現(xiàn)機制在?并發(fā)TCP連接的情形下使?其實也有嚴重的性能問題。但在最新的Linux內(nèi)核中,AIO
的實現(xiàn)已經(jīng)得到改進)。
綜上所述,在開發(fā)?持?并發(fā)TCP連接的Linux應(yīng)?程序時,應(yīng)盡量使?epoll或AIO技術(shù)來實現(xiàn)并發(fā)的TCP連接上的I/O控制,這將為提升程
序?qū)?并發(fā)TCP連接的?持提供有效的I/O保證。
內(nèi)核參數(shù)的優(yōu)化
/etc/是?來控制linux?絡(luò)的配置?件,對于依賴?絡(luò)的程序(如web服務(wù)器和cache服務(wù)器)?常重要,RHEL默認提供的最好調(diào)
整。
推薦配置(把原/etc/內(nèi)容清掉,把下?內(nèi)容復(fù)制進去):
_local_port_range=102465536
_max=16777216
_max=16777216
_rmem=47216
_wmem=47216
_fin_timeout=10
_tw_recycle=1
_timestamps=0
_window_scaling=0
_sack=0
_max_backlog=30000
_no_metrics_save=1
onn=262144
_syncookies=0
_max_orphans=262144
_max_syn_backlog=262144
_synack_retries=2
_syn_retries=2
這個配置參考于cache服務(wù)器varnish的推薦配置和SunOne服務(wù)器系統(tǒng)優(yōu)化的推薦配置。
不過varnish推薦的配置是有問題的,實際運?表明“_fin_timeout=3”的配置會導(dǎo)致頁?經(jīng)常打不開;并且當(dāng)?友使?的是IE6瀏
覽器時,訪問?站?段時間后,所有?頁都會打不開,重啟瀏覽器后正常。可能是國外的?速快吧,我們國情決定需要調(diào)
整“_fin_timeout=10”,在10s的情況下,?切正常(實際運?結(jié)論)。
修改完畢后,執(zhí)?:
/sbin/sysctl-p/etc/
/sbin/=1
命令?效。為了保險起見,也可以reboot系統(tǒng)。
調(diào)整?件數(shù):
linux系統(tǒng)優(yōu)化完?絡(luò)必須調(diào)?系統(tǒng)允許打開的?件數(shù)才能?持?的并發(fā),默認1024是遠遠不夠的。
執(zhí)?命令:
Shell代碼
echoulimit-HSn65536>>/etc/
echoulimit-HSn65536>>/root/.bash_profile
ulimit-HSn65536
備注:
對mysql?戶可同時打開?件數(shù)設(shè)置為10240個;
將Linux系統(tǒng)可同時打開?件數(shù)設(shè)置為1000000個(?定要?于對?戶的同時打開?件數(shù)限制);
將Linux系統(tǒng)對最?追蹤的TCP連接數(shù)限制為20000個(但是,建議設(shè)置為10240;因為對mysql?戶的同時打開?件數(shù)已經(jīng)限制在10240
個;且較?的值可以節(jié)省內(nèi)存);
將linux系統(tǒng)端?范圍配置為1024~30000(可以?持60000個以上連接,不建議修改;默認已經(jīng)?持20000個以上連接);
綜合上述四點,TCP連接數(shù)限制在10140個。
這10240個?件中還得除去每個進程必然打開的標準輸?,標準輸出,標準錯誤,服務(wù)器監(jiān)聽socket,進程間通訊的unix域socket等?件。
因此,當(dāng)需要對TCP連接數(shù)進?調(diào)整時只需要調(diào)整ulimit參數(shù)。
Linux下查看tcp連接數(shù)及狀態(tài)命令:
netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'
本文發(fā)布于:2023-03-10 10:31:22,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1678415482134715.html
版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:連接數(shù).doc
本文 PDF 下載地址:連接數(shù).pdf
| 留言與評論(共有 0 條評論) |