服務端調整系統的參數,在/etc/sysctl.conf中:socket
◦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 2097152 3145728
◦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_max_orphans = 131072
◦
◦/sbin/sysctl -p 生效 tcp
主要看這幾項:
net.ipv4.tcp_rmem 用來配置讀緩衝的大小,三個值,第一個是這個讀緩衝的最小值,第三個是最大值,中間的是默認值。咱們能夠在程序中修改讀緩衝的大小,可是不能超過最小與最大。爲了使每一個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」。
另外net.ipv4.tcp_max_orphans這個值也要設置一下,這個值表示系統所能處理不屬於任何進程的socket數量,當咱們須要快速創建大量鏈接時,就須要關注下這個值了。當不屬於任何進程的socket的數量大於這個值時,dmesg就會看到」too many of orphaned sockets」。spa