make –C /lib/modules/2.6.18-92.e15/build SUBDIRS=`pwd` modules
如此一来加载ip_conntrack.ko之后,内核日志将打印出:ip_conntrack version 2.4 (8192 buckets, 65536 max) - 102628 bytes per conntrack
由此看出ip_conntrack结构体已经增大了,这样撑满整个可用内存所需的网络连接压力就大大减小了,也就不用什么loadrunner之类的东西了。为了尽快撑满可以使用的内存,还要将关于ip_conntrack的所有timeout设置的比较长,相当长:
sysctl -w net.ipv4.netfilter.ip_conntrack_generic_timeout=600000 sysctl -w net.ipv4.netfilter.ip_conntrack_icmp_timeout=300000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_close=1000000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack=300000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=432000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=600000 sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent=120000
这样既有的一个流就会“永久保持”了,一直占着ip_conntrack结构体不放,直到可用的内存溢出。在加载了ip_conntrack模块之后,所有过往的数据包就会自动被追踪,下面编写以下脚本:
for (( i=1; i<255; i++)); do for (( j=1; j<255; j++)); do ping 192.168.$i.$j -c 1 -W 1 curl --connect-timeout 1 http://138.$i.$j.80/ curl --connect-timeout 1 http://38.$i.$j.80/ curl --connect-timeout 1 http://$i.1.$j.80/ curl --connect-timeout 1 http://$j.$i.9.8/ done done