• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    CentOS ip_conntrack: table full, dropping packet 的解决方法
    那么,为什么会出现 ip_conntrack: table full, dropping packet 呢?iptables 使用一张连接跟踪表,来描述连接状态,当这张表满了,就会在日志里面写入该信息。这可能有点难以理解,那么到底在什么情况下,我们需要在日志里面查找这条记录呢?

    当你发现,PING 服务器的结果,出现丢包,或者出现延迟不稳定,忽高忽低,在排除线路因素之后,就应当考虑 ip_conntrack: table full, dropping packet 。

    下面介绍 ip_conntrack: table full, dropping packet 的解决方法:

    CentOS 6 /RHEL 5 下的解决方法:

    1.运行


    复制代码
    代码如下:
    sysctl -w net.ipv4.netfilter.ip_conntrack_max=100000.sysctl -w net.ipv4.netfilter.ip_conntrack_max=100000


    2.在 /etc/sysctl 中加入:


    复制代码
    代码如下:
    net.ipv4.netfilter.ip_conntrack_max = 100000.net.ipv4.netfilter.ip_conntrack_max = 100000


    3.使其生效:


    复制代码
    代码如下:
    sysctl -p.sysctl -p


    CentOS 6 /RHEL 6 下的解决方法:

    1.运行


    复制代码
    代码如下:
    sysctl -w net.nf_conntrack_max=100000.sysctl -w net.nf_conntrack_max=100000


    2.在 /etc/sysctl 中加入:


    复制代码
    代码如下:
    net.nf_conntrack_max = 100000.net.nf_conntrack_max = 100000


    3.使其生效:


    复制代码
    代码如下:
    sysctl -p.sysctl -p


    *** 如果 Xen DomU 出现零星丢包或者 PING 忽高忽低,同时关闭 iptables 后 ping 正常,则多半是这个问题。

    或参考下面的方法试试

    一。服务器出现了大量的丢包现象,通过查看message出现了下面的错误:
    kernel:ip_conntrack:table full,dropping packet

    解决的方法:

    复制代码
    代码如下:

    显示当前的会话数:
    cat /proc/net/ip_conntrack | wc -l
    显示系统目前配置的最大 conntrack 数:
    cat /proc/sys/net/ipv4/ip_conntrack_max
    # 一旦前者的数字大于后者时,系统就报错,解决办法:
    echo “” > /proc/sys/net/ipv4/ip_conntrack_max
    # 然后写入
    /etc/sysctl.conf
    net.ipv4.ip_conntrack_max =


    有两点我们要注意.

    -conntrack最大数量.叫做conntrack_max
    -存储这些conntrack的hash表的大小,叫做hashsize
    当conntrack入口数大于conntrack_max时,在hash表中每一个conntrack list中的存储的入口将不可控.(conntrack_mark/hashsize 为每个list所能存储的入口的数量)
    hash表存在于固定的的不可swap的内存中. conntrack_mark决定占用多少这些不可swap的内存.
    缺省的hashsize
    ——————————–
    conntrack_max=hashsize*8
    i386中 hashsize=conntrack_max/8=ramsize(in bytes)/131072=ramsize(in MegaBytes)*8.
    所以32位pc,512M内存可以存512*1024^2/128/1024=512*8=4096(连接池list)
    但是正确的算法是:
    hashsize=conntrack_max/8=ramsize(in bytes)/131072/(x/32)
    x表示使用的指针类型是(32位还是64的)
    —————————-\
    读取conntrack_max值
    2.4内核
    cat /proc/sys/net/ipv4/ip_conntrack_max
    2.6内核
    cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max

    读取hashsize值
    cat /proc/sys/net/ipv4/netfilter/ip_conntrack_buckets
    ——————————
    你可修改这两个值以适应高负载的netfilter的应用
    系统默认为conntrack_max:hashsize是8:1,你可以设成1:1以提高性能.
    ————————-
    设置conntrack_max
    echo $CONNTRACK_MAX > /proc/sys/net/ipv4/ip_conntrack_max
    设置hashsize
    如果(netfilter conntrack静态编译在内核中),2.4中可以在编译时设置,2.6可以在启动中(boot时)加入ip_conntrack.hashsize=$hashsize
    如果为modules,则可以使用 modprobe ip_conntrack hashsize=$hashsize
    #####################################
    实践过方法:
    Vi /etc/modprobe.conf
    添加:
    options ip_conntrack hashsize=524288

    vi /etc/sysctl.conf
    net.ipv4.netfilter.ip_conntrack_max = 524288 (根据自己的物理内存算出来的)
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
    ##########################################
    ————————–
    conntrack使用的内存计算
    size_of_mem_used_by_conntrack (in bytes) =
    CONNTRACK_MAX * sizeof(struct ip_conntrack) +
    HASHSIZE * sizeof(struct list_head)
    其中sizeof(struct ip_conntrack)大概在192-352字节之间.
    sizeof(struct list_head) = 2 * size_of_a_pointer(i386中为4字节)
    一个例子512m内存,使用384m来用于conntrack则
    384*1024*1024/(352+8)(使用它是保守计算) =~1143901 (此为conntrack:hashszie为1:1,352为sizeof(ip_conntrack),8为sizeof(list_head).
    由于hash最好设为2的乘方的数,所以为1048576(2^20).
    ———————
    附相关设置及命令:
    ip_conntrack timeout 原值432000秒(5天)
    可改为10小时,echo “600″ > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
    ip_conntrack buffer使用情况
    grep conn /proc/slabinfo
    例ip_conntrack 188069 229570 336 11 1 : tunables 54 27 8 : slabdata 20870

    相关修改:
    echo “1024 65000″ > /proc/sys/net/ipv4/ip_local_port_range
    echo “100 1200 128 512 15 5000 500 1884 2″>/proc/sys/vm/bdflush
    echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    echo “1″ > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
    echo “1048576″ > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
    echo “1″ > /proc/sys/net/ipv4/ip_forward
    echo “268435456″ >/proc/sys/kernel/shmall
    echo “536870912″ >/proc/sys/kernel/shmmax
    echo “600″ > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
    echo “1024″ > /proc/sys/net/ipv4/neigh/default/gc_thresh1
    echo “2048″ > /proc/sys/net/ipv4/neigh/default/gc_thresh2
    echo “4096″ > /proc/sys/net/ipv4/neigh/default/gc_thresh3
    echo “52428800″ > /proc/sys/net/ipv4/route/max_size
    echo “1″ > /proc/sys/net/ipv4/conf/all/proxy_arp
    echo “1″ > /proc/sys/net/ipv4/tcp_window_scaling
    上一篇:CentOS minimal 版安装图形界面的步骤分享,中文语言包.
    下一篇:Hyper-V装CentOS需要的Linux Integration Components的步骤分享
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    CentOS ip_conntrack: table full, dropping packet 的解决方法 CentOS,conntrack,table,full,dropping,