• 分清云淡
    2019-03-01
    https://mp.weixin.qq.com/s/VYBs8iqf0HsNg9WAxktzYQ:(多个容器snat时因为搜索本地可用端口(都从1025开始,到找到可用端口并插入到conntrack表是一个非事务并且有时延--第二个插入会失败,进而导致第一个syn包被扔掉的错误,扔掉后重传找到新的可用端口,表现就是时延偶尔为1秒或者3秒)

    这篇文章是我见过诊断NAT问题最专业的,大家要多学习一下里面的思路和手段

    作者回复: 👍 谢谢分享。内核问题的分析和排查一般都比较耗时间,对基础知识的要求也会高一些。

    
     10
  • 无名老卒
    2019-05-01
    很惊讶,之前在线上环境中就出现了kernel: nf_conntrack: table full, dropping packet.的报错,当时就认为是conntrack_max导致的,后面调整了这个值之后就恢复了,但其实那次故障也不应该会加载nf_conntrack模块,因为iptables规则只是设置了几个IP允许登陆服务器,当时也不清楚为什么会去加载这个模块了。

    同时,conntrack_max和conntrack_buckets有没有什么联系呢?从描述中,感觉conntrack_buckets应该要大于conntrack_max才对,但实际 上不是这样,请老师解惑下。
    展开

    作者回复: 应该是反过来,nf_conntrack_max是最大连接跟踪数,nf_conntrack_buckets是连接跟踪表(哈希表)大小。哈希表最大也就是最大连接跟踪数

    
     2
  • vvccoe
    2019-02-27
    ‘# 连接跟踪对象大小为 376,链表项大小为 16
    nf_conntrack_max* 连接跟踪对象大小 +nf_conntrack_buckets* 链表项大小
    = 1000*376+65536*16 B
    = 1.4 MB’
    老师 上面的376和16 是固定值吗?

    作者回复: 这是内核数据结构的大小,一般不会变化

    
     2
  • Geek_007
    2019-04-10
    老师你好,有两个问题想请教一下。
    第一点,了解到ip_conntrack模块既然会限制链接,且调大会导致占用内存,而且调大了也不一定能解决大流量服务器的网络性能问题,我理解是不是应该关掉ip_conntrack模块,因为业务服务器按理说是不需要状态追踪的。
    第二点,如果我关掉ip_conntrack,会不会因为我执行iptables命令导致该模块被加载,或者执行conntrack命令导致模块被加载。。

    作者回复: 1. 有很多服务是依赖conntrack的,所以要看实际需求确定
    2. 要看iptables规则是不是用到了conntrack功能

    
     1
  • 腾达
    2019-03-01
    这个案例,能不能讲讲怎么找到是NAT问题?这个很关键,但文章里直接点明说是NAT问题,这个就不好了,一般看cpu,看其他指标很难想到是nat问题,真实场景里,怎么会想到是nat问题呢?

    作者回复: 嗯嗯,是个好问题。下一模块中有内核线程的分析思路,到时候可以看到分析的方法

    
     1
  • 明翼
    2019-03-01
    systemtap这个真牛,还可以追踪内核模块执行,长见识咯!iptables需要学习下
    
     1
  • 夜空中最亮的星(华仔...
    2019-02-27
    以前只是知道net性能不好,今天通过老师的讲解彻底明白了来龙去脉。
    公司内部上网用的就是net 人一多就特别慢。
    业务基本上没用过net。

    作者回复: NAT,不是net😊

    
     1
  • 我来也
    2019-02-27
    [D42打卡]
    今天的内容只能围观了.
    居然还用了内核动态追踪工具,统计丢包位置.
    对于我这种完全不了解内核的人来说, 只当是开了眼界.

    对于我来说,目前知道 NAT会带来性能损耗 就行了.🤦‍♀️
    能避免就避免使用,不能避免了就在请求数较多的场景下调些参数.

    `# 连接跟踪对象大小为 376,链表项大小为 16`
    这应该是c结构体的大小吧.
    展开

    作者回复: 是的

    
     1
  • Cranliu
    2019-02-27
    今天是跟不上了,没有网络基础,进入到网络模块就开始觉得吃力了😂

    作者回复: 先尝试尝试案例,再回去补补基础

     1
     1
  • Geek_1386e9
    2019-12-14
    老师,有个snat问题请教下,我们使用了华为云的snat网关,我理解snat网关代理内网主机访问公网是作为客户端访问公网的,那么最大的连接数应该受到端口号65535的限制,为什么在管理后台可以查到snat的连接数会超过65535呢,想不明白,烦请抽空解答下
    
    
  • 辉晖
    2019-10-16
    这边安装实验使用ab压测,没有大量nf_hook_slow丢包
    29384 packets dropped at tcp_rcv_state_process
    22287 packets dropped at sk_stream_kill_queues
    12686 packets dropped at tcp_v4_rcv
    6668 packets dropped at tcp_v4_do_rcv
    8 packets dropped at unix_stream_connect
    1 packets dropped at nf_hook_slow
    1 packets dropped at unix_release_sock
    展开
    
    
  • 刘鼎
    2019-09-19
    # 连接跟踪对象大小为 376,链表项大小为 16
    nf_conntrack_max* 连接跟踪对象大小 +nf_conntrack_buckets* 链表项大小
    = 1000*376+65536*16 B
    = 1.4 MB

    这个计算,应该是假设每个链表只有一个结点吧?
    我理解是有65535个链表,假如1000个在一个链表,应该是65535+1000个的结点空间?
    展开
    
    
  • tony
    2019-07-31
    root@ub1805:~# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2EDC64DC5AEE1F6B9C621F0C8CAB6595FDFF622
    Executing: /tmp/apt-key-gpghome.kvfiZkEsRG/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys F2EDC64DC5AEE1F6B9C621F0C8CAB6595FDFF622
    gpg: keyserver receive failed: Invalid argument
    root@ub1805:~# stap-prep
    You need package linux-image-4.15.0-52-generic-dbgsym but it does not seem to be available
     Ubuntu -dbgsym packages are typically in a separate repository
     Follow https://wiki.ubuntu.com/DebuggingProgramCrash to add this repository
    root@ub1805:~# apt-get install linux-image-`uname -r`-dbgsym
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package linux-image-4.15.0-52-generic-dbgsym
    E: Couldn't find any package by glob 'linux-image-4.15.0-52-generic-dbgsym'
    E: Couldn't find any package by regex 'linux-image-4.15.0-52-generic-dbgsym'
    好像无法安装
    展开
    
    
  • Tom
    2019-07-31
    老师你好,docker,是不是必然会用到dnat的端口映射?linux服务器内 nat本身应该也有流量限制吧!

    作者回复: 不一定,比如使用hostnetwork就会直接使用host的网络。NAT支持流量限制,不过需要额外的配置

    
    
  • bigzuo
    2019-07-03
    不太熟悉linux 网络底层超过,这节课看的很费力

    作者回复: 正好赶紧去补补😊

    
    
  • 悟空
    2019-06-09
    nf_conntrack_buckets 和 nf_conntrack_max 从文中的描述没有搞清楚,
    我们只是调整了 nf_conntrack_max(最大连接跟踪数),那么,这个连接是记录在 nf_conntrack_buckets(连接跟踪表)中的吗?,那是否意味着,调整max的同时,也得调整buckets表的大小?

    作者回复: 可以只调整一个,不过要记得这两个参数一起决定了连接跟踪表的结构,这是一个哈希表,两者相除表示冲突的程度。

    
    
  • manatee
    2019-05-27
    另外安装centos 安装systemtap那边有个小小的笔误,最后那个stab-prep 应该是stap-prep

    作者回复: 谢谢指出

    
    
  • manatee
    2019-05-27
    讲个不是很重要的点,ab命令在centos中没有-s参数

    作者回复: 嗯嗯 不同版本的选项有可能不一样,所以我们一直强调要查man

    
    
  • Maxwell
    2019-03-24
    请问这个错误是什么原因导致的呢?
    root@maxwell-virtual-machine:/usr/bin/env# stap --all-modules dropwatch.stp
    semantic error: while resolving probe point: identifier 'kernel' at dropwatch.stp:18:7
            source: probe kernel.trace("kfree_skb") { locations[$location] <<< 1 }
                          ^

    semantic error: no match

    Pass 2: analysis failed. [man error::pass2]
    Tip: /usr/share/doc/systemtap/README.Debian should help you get started.
    展开

    作者回复: 可能是debuginfo跟内核版本不一致

    
    
  • xfan
    2019-02-28
    讲的不错,让我懂了追踪过程,和我最想知道的东西

    作者回复: 😊

    
    
我们在线,来聊聊吧