原贴:http://www.chinaunix.net/jh/4/367999.html
http://www.chinaunix.net 作者: cgweb 发表于:2005-01-17 08:29:31 【 发表评论 】【 查看原文 】【 Linux讨论区 】【 关闭 】
[精彩] 在做NAT的机器上处理ip_conntrack满的方法 ( 原 创 )
http://www.chinaunix.net 作者: cgweb 发表于:2005-01-17 08:29:31 【 发表评论 】【 查看原文 】【 Linux讨论区 】【 关闭 】
conntrack 表满的处理方法 前段时间配置的iptables+squid做的proxy server ,一直工作正常。今天我上控制台上发现 Jun 18 12:43:36 red-hat kernel: ip_conntrack: table full, dropping packet. Jun 18 12:49:51 red-hat kernel: ip_conntrack: table full, dropping packet. Jun 18 12:50:57 red-hat kernel: ip_conntrack: table full, dropping packet. Jun 18 12:57:38 red-hat kernel: ip_conntrack: table full, dropping packet. IP_conntrack 表示连接跟踪数据库(conntrack database),代表NAT机器跟踪连接的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip- sysctl函数设置。每一个跟踪连接表会占用350字节的内核存储空间,时间一长就会把默认的空间填满,那么默认空间时多少?我以 redhat为例在内存为64MB的机器上时4096,内存为128MB是 8192,内存为256MB是16376,那末就能在/proc/sys /net/ipv4/ip_conntrack_max里查看、设置。 例如:增加到81920,可以用以下命令: echo "81920" >; /proc/sys/net/ipv4/ip_conntrack_max 那样设置是不会保存的,要重启后保存可以在/etc/sysctl.conf中加: net.ipv4.ip_conntract_max =81920 按照此方法改变后一切正常,要是在满了可以加大其值. pdiunix 回复于:2004-07-16 11:56:07 写的好,支持原创!! llzqq 回复于:2004-07-16 12:43:37 已经加到“一句话问答”中了 散步的风 回复于:2004-07-16 15:43:25 这个早就知道,这个解决办法只是一个堵的办法,有没有办法输导啊。就是超过之后自动覆盖以前的内容。仅仅增大表的数量不是终极的解决方案啊。就算你设置的再大,他终究有一天会满的。没有办法,我再公司的设置(公司大概有将近1k的电脑)是每隔1个月就重新启动一次服务器,郁闷! q1208c 回复于:2004-07-16 15:56:26 小声问一下楼上的"风"兄弟,它自己不会清空的么?一直加下去的么? q1208c 回复于:2004-07-16 16:06:58 刚刚看了一下我的,那个表里的项是会少的。就是当一个连接结束时,就从表时删了呀! coco520 回复于:2004-07-19 16:48:10 里面的tcp连接缺省的timeout时间使5天,对于主要数据使http协议来说太长了,你可以把它调短一些,我现在调成5分钟,暂时没出什么问题。:) test_tmp 回复于:2004-07-20 08:58:44 小声问一下楼上的,如何调成5分钟呀!谢谢! nozxb 回复于:2004-07-20 09:20:53 :) saman 回复于:2004-07-22 16:46:39 引用:原帖由 "test_tmp"]小声问一下楼上的,如何调成5分钟呀!谢谢! 发表: 需要重新编译一下内核,具体的方法网上查查吧,很久以前做过,忘了。 个人觉得最好的办法还是加大内存,1G足够了。偶尔再重启一下。 散步的风 回复于:2004-07-25 12:41:01 引用:原帖由 "saman" 发表: 需要重新编译一下内核,具体的方法网上查查吧,很久以前做过,忘了。 个人觉得最好的办法还是加大内存,1G足够了。偶尔再重启一下。 能不能给个提示? huter 回复于:2004-09-14 09:37:56 升级内核就可以防止 ip_conntrack满的问题,我的NAT上96M内存也不需要重启。 双眼皮的猪 回复于:2005-01-06 09:35:17 不是你的nat上多大内存也不需要重新启动,跟踪的连接数不多,32m也不需要重新启动的... 至于解决办法,建议先读一读tcpip详解,楼主的这种解决办法这能缓,不能真正有效果... 至于怎么做,修改/proc/sys/net/ipv4/下的一些参数...不让连接存活的时间过长,因为很多都只是http,短连接接到响应就关闭连接了,但是ip_conntrack仍然需要保存.. 不需要重新编译内核吧,一般只是在/proc/sys/net/ipv4里边这些参数微调一下就行了 ...但重新启动就没效果了 希望在启动后也有效,加到/etc/sysctl.conf里改一下... skylove 回复于:2005-01-16 23:54:28 网关定时帮用户主动帮着释放连接就是了嘛...哦呵呵 hping命令出马,谁与争锋,去linuxforum看吧,那里的斑竹写了个方法,我都用了n个月了... platinum 回复于:2005-01-17 08:16:46 下载hping: http://www.hping.org/download.html ./configure make make install 安装后写一个script: 代码:
保存为clr_conns.sh 用: sh clr_conns.sh x.x.x.x 就可以清除显示的连接. 摘自:中国Linux论坛 xuhehao 回复于:2005-01-17 08:29:31 引用:原帖由 "cgweb" 发表: 那样设置是不会保存的,要重启后保存可以在/etc/sysctl.conf中加: net.ipv4.ip_conntract_max =81920 按照此方法改变后一切正常,要是在满了可以加大其值. net.ipv4.ip_conntract_max =81920 是这个语法吗?还是 net.ipv4.ip_conntrack_max =81920 :shock: |
原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=367999 转载请注明作者名及原文出处 |