kernel: ip_conntrack: table full, dropping packet.

今日服务器流量监控发现2台下载服务器流量愈来愈低,到最后居然直接连不上了。html

通知机房排除机房缘由以后,连上系统查看日志,发现message里面不少kernel: ip_conntrack: table full, dropping packet.报错。sql

google了一下,发现也有其余人遇到相似问题,原来是ip_conntrack(链接跟踪表)中的数量过过多致使的,默认是65528。bash

wc -l /proc/net/ip_conntrack能够统计当前有多少个,超过65528就会kernel报错,cat /proc/sys/net/ipv4/ip_conntrack_max查看当前设置。服务器

解决办法:
增长ip_conntrack_max设置,能够在/etc/sysctl.conf文件中增长:
net.ipv4.ip_conntrack_max = 655280而后键入命令sysctl -p生效tcp

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=86400     设置链接跟踪表中失效时间为1天,若是以为一天仍是长的话能够改成3600(一小时)或者600(10分钟)ide

若是想当即降下来跟踪表中的链接能够尝试使用如下办法:
下载hping:
http://www.hping.org/download.html

./configure
make
make install

安装后写一个script.this

  
  
  
  
  1. #!/bin/bash  
  2. echo  
  3. echo "############################" 
  4. echo "# Edit by Youngh 2003.06.24 v1.1 " 
  5. echo "# Usage : clr_conns IpAddress" 
  6. echo "# This will clear all connections from this IP_Address" 
  7. echo "# Example:/root/clr_conns 10.0.3.3 " 
  8. echo "############################" 
  9. echo  
  10. if [ -z $1 ] ; then 
  11. exit  
  12. fi  
  13. grep -E "^tcp .{10,25}ESTABLISHED src=$1 " /proc/net/ip_conntrack | while read line ; do  
  14. S_IP=`echo $line | awk '{print substr($5,5)}'`  
  15. S_SOCK=`echo $line | awk '{print substr($7,7)}'`  
  16. D_IP=`echo $line | awk '{print substr($6,5)}'`  
  17. D_SOCK=`echo $line | awk '{print substr($8,7)}'`  
  18. echo "$S_IP:$S_SOCK $D_IP:$D_SOCK" 
  19. hping2 $D_IP -R -s $S_SOCK -p $D_SOCK -a $S_IP -k -c 1 >/dev/null 2>/dev/null &  
  20. done 
保存为clr_conns.sh
用:sh clr_conns.sh IP
就能够清除链接.
查看ip_conntrack前10位IP cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10  
相关文章
相关标签/搜索