欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何實現單服務器300萬個長連接的

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

如何實現單服務器300萬個長連接的?

如何在單臺服務器上實現百萬級長連接,以下是實現該目標進行的一些優化:

1.首先需要準備一臺大內存的服務器,裝上linux系統,比如rehat、centos(內核版本在2.6.25之上)等。

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

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

2.裝好系統后,調整一下系統的參數,在/etc/sysctl.conf中

#定義了系統中每一個端口最大的監聽隊列的長度,這是個全局的參數,默認值為128 net.core.somaxconn = 2048

#系統讀寫緩存,默認值

net.core.rmem_default = 262144

net.core.wmem_default = 262144

#系統讀寫緩存

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是這個讀緩沖的最小值,第三個是最大值,中間的是默認值。zhe在程序中修改讀緩沖的大小,但不能超過最小與最大。為了使每個socket所使用的內存數最小,我這里設置默認值為4096。

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

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

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

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

現在再設置nofile就可以了:

admin soft nofile 2000000

admin hard nofile 2000000

java 輪詢分發,如何實現單服務器300萬個長連接的