色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何實現(xiàn)單服務(wù)器300萬個長連接的

林國瑞2年前16瀏覽0評論

如何實現(xiàn)單服務(wù)器300萬個長連接的?

如何在單臺服務(wù)器上實現(xiàn)百萬級長連接,以下是實現(xiàn)該目標(biāo)進行的一些優(yōu)化:

1.首先需要準(zhǔn)備一臺大內(nèi)存的服務(wù)器,裝上linux系統(tǒng),比如rehat、centos(內(nèi)核版本在2.6.25之上)等。

為什么需要大內(nèi)存,因為每個連接都需要有讀寫緩存,具體看第二部內(nèi)容;

為什么內(nèi)核版本要在2.6.25之上,因為2.6.25內(nèi)核之前有個 宏定義,定義了最大文件描述符大小為1024*1024,正好是100萬。可以通過/proc/sys/fs /nr_open來設(shè)置該值。

2.裝好系統(tǒng)后,調(diào)整一下系統(tǒng)的參數(shù),在/etc/sysctl.conf中

#定義了系統(tǒng)中每一個端口最大的監(jiān)聽隊列的長度,這是個全局的參數(shù),默認(rèn)值為128 net.core.somaxconn = 2048

#系統(tǒng)讀寫緩存,默認(rèn)值

net.core.rmem_default = 262144

net.core.wmem_default = 262144

#系統(tǒng)讀寫緩存

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 4096 16777216

net.ipv4.tcp_wmem = 4096 4096 16777216

net.ipv4.tcp_mem = 786432 3145728 4194304

net.ipv4.tcp_max_syn_backlog = 16384

net.core.netdev_max_backlog = 20000

net.ipv4.tcp_fin_timeout = 15

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_rmem用來配置tcp讀緩沖的大小,第一個4096是這個讀緩沖的最小值,第三個是最大值,中間的是默認(rèn)值。zhe在程序中修改讀緩沖的大小,但不能超過最小與最大。為了使每個socket所使用的內(nèi)存數(shù)最小,我這里設(shè)置默認(rèn)值為4096。

net.ipv4.tcp_wmem用來配置寫緩沖的大小。讀緩沖與寫緩沖在大小,直接影響到socket在內(nèi)核中內(nèi)存的占用,這就是第一條里說的為什么需要大內(nèi)存。

而net.ipv4.tcp_mem則是配置tcp的內(nèi)存大小,其單位是頁,而不是字節(jié)。當(dāng)超過第二個值時,TCP進入 pressure模式,此時TCP嘗試穩(wěn)定其內(nèi)存的使用,當(dāng)小于第一個值時,就退出pressure模式。當(dāng)內(nèi)存占用超過第三個值時,TCP就拒絕分配 socket了,查看dmesg,會打出很多的日志“TCP: too many of orphaned sockets”。

另外,服務(wù)端需要打開大量的文件描述符,比如200萬個,配置如下:

設(shè)置nofile為200萬(2.6.25內(nèi)核及其之后版本),這個值是可以通過/proc/sys/fs /nr_open來設(shè)置。

現(xiàn)在再設(shè)置nofile就可以了:

admin soft nofile 2000000

admin hard nofile 2000000

java 輪詢分發(fā),如何實現(xiàn)單服務(wù)器300萬個長連接的