haproxyを検証しようとしていて起きた。
仮想OS上のCentOS6のhaproxy目掛けてhttp_load をぶっこんだところ、syslogに大量のエラーが出た。
__ratelimit: 10662 callbacks suppressed nf_conntrack: table full, dropping packet. nf_conntrack: table full, dropping packet. nf_conntrack: table full, dropping packet. nf_conntrack: table full, dropping packet. nf_conntrack: table full, dropping packet.
名前からするとiptablesのmoduleぽい。
# lsmod | grep nf_conntrack nf_conntrack_ipv4 9506 3 iptable_nat,nf_nat nf_conntrack 79453 4 ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4 nf_defrag_ipv4 1483 1 nf_conntrack_ipv4
メモリ消費量増えそうな気がするけど、/procのnf_conntrack_max の数値を増やしたら、エラーは出なくなって、http_load のrpsも上がった。
net.netfilter.nf_conntrack_maxとnet.nf_conntrack_maxは連動していて、どちらかを変更すればもう一方も変更されるみたい。念の為systl.confには両方書いておいた。
# sysctl -a | grep nf_conntrack_max net.netfilter.nf_conntrack_max = 15704 net.nf_conntrack_max = 15704 # vim /etc/sysctl.conf #### 追加 net.netfilter.nf_conntrack_max = 50000 net.nf_conntrack_max = 50000
abの結果
/proc (/etc/sysctl.conf 変更前)
$ http_load -parallel 5000 -seconds 5 url.txt 15976 fetches, 2063 max parallel, 15480 bytes, in 5.00174 seconds 0.968953 mean bytes/connection 3194.09 fetches/sec, 3094.92 bytes/sec msecs/connect: 183.26 mean, 4175.3 max, 0.105 min msecs/first-response: 133.948 mean, 3378.41 max, 0.369 min HTTP response codes: code 200 -- 3096
/proc (/etc/sysctl.conf 変更後)
$ http_load -parallel 5000 -seconds 5 url.txt 33529 fetches, 2063 max parallel, 32485 bytes, in 5.0001 seconds 0.968863 mean bytes/connection 6705.67 fetches/sec, 6496.87 bytes/sec msecs/connect: 295.982 mean, 3901.65 max, 0.111 min msecs/first-response: 195.308 mean, 1350.56 max, 0.347 min HTTP response codes: code 200 -- 6497