歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 關於linux中的CONNTRACK_MAX和HASHSIZE要注意的地方

關於linux中的CONNTRACK_MAX和HASHSIZE要注意的地方

日期:2017/3/1 15:16:56   编辑:關於Linux
關於linux中的CONNTRACK_MAX和HASHSIZE要注意的地方 如果在壓力測試的時候,並發數增大,但無法完成測試,可以嘗試調整下參數: vi /etc/sysctl.conf 在kernel2.6之前的添加項: net.ipv4.netfilter.ip_conntrack_max = 655360 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180 kernel2.6之後的添加項: net.nf_conntrack_max = 655360 # net.nf_conntrack_max = 655360 也可以 net.netfilter.nf_conntrack_tcp_timeout_established = 1200 sysctl -p /etc/sysctl.conf 如果報錯:error: "net.nf_conntrack_max" is an unknown key 則需要使用modprobe載入ip_conntrack模塊,lsmod查看模塊已載入。 modprobe ip_conntrack 關於 --CONNTRACK_MAX 允許的最大跟蹤連接條目,是在內核內存中netfilter可以同時處理的“任務”(連接跟蹤條目) --HASHSIZE 存儲跟蹤連接條目列表的哈西表的大小 CONNTRACK_MAX和HASHSIZE的默認值 一般來說,CONNTRACK_MAX和HASHSIZE都會設置在“合理”使用的值上,依據可使用的RAM的大小來計算這個值。 CONNTRACK_MAX的默認值 在i386架構上,CONNTRACK_MAX = RAMSIZE (以bytes記) / 16384 =RAMSIZE (以MegaBytes記) * 64,因此,一個32位的帶512M內存的PC在默認情況下能夠處理512*1024^2/16384 = 512*64 = 32768個並發的netfilter連接。 但是真正的公式是:CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32) 這裡x是指針的bit數,(例如,32或者64bit) 請注意: -默認的CONNTRACK_MAX值不會低於128 -對於帶有超過1G內存的系統,CONNTRACK_MAX的默認值會被限制在65536(但是可以手工設置成更大的值) HASHSIZE的默認值 通常,CONNTRACK_MAX = HASHSIZE * 8。這意味著每個鏈接的列表平均包含8個conntrack的條目(在優化的情況並且CONNTRACK_MAX達到的情況下),每個鏈接的列表就是一個哈西表條目(一個桶)。 在i386架構上,HASHSIZE = CONNTRACK_MAX / 8 =RAMSIZE (以bytes記) / 131072 = RAMSIZE (以MegaBytes記) * 8。舉例來說,一個32位、帶512M內存的PC可以存儲512*1024^2/128/1024 =512*8 = 4096 個桶(鏈接表) 但是真正的公式是:HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (以bytes記) / 131072 / (x / 32)這裡x是指針的bit數,(例如,32或者64bit) 請注意: -默認HASHSIZE的值不會小於16 -對於帶有超過1G內存的系統,HASHSIZE的默認值會被限制在8192(但是可以手工設置成更大的值)
Copyright © Linux教程網 All Rights Reserved