今日服務器流量監控發現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
- #!/bin/bash
- echo
- echo "############################"
- echo "# Edit by Youngh 2003.06.24 v1.1 "
- echo "# Usage : clr_conns IpAddress"
- echo "# This will clear all connections from this IP_Address"
- echo "# Example:/root/clr_conns 10.0.3.3 "
- echo "############################"
- echo
- if [ -z $1 ] ; then
- exit
- fi
- grep -E "^tcp .{10,25}ESTABLISHED src=$1 " /proc/net/ip_conntrack | while read line ; do
- S_IP=`echo $line | awk '{print substr($5,5)}'`
- S_SOCK=`echo $line | awk '{print substr($7,7)}'`
- D_IP=`echo $line | awk '{print substr($6,5)}'`
- D_SOCK=`echo $line | awk '{print substr($8,7)}'`
- echo "$S_IP:$S_SOCK $D_IP:$D_SOCK"
- hping2 $D_IP -R -s $S_SOCK -p $D_SOCK -a $S_IP -k -c 1 >/dev/null 2>/dev/null &
- done