今天帮 @urcyanide 查了很教科书的一个问题
首先,下午的时候,网友求助我说某个客户的服务出现一个很奇怪的情况。具体现象为服务访问超时。抓包发现,一直在发送 SYN,但是服务侧没有响应(即三次握手没法建立),tcpdump 的抓包结果也验证了这点。我们能看到一直在发 SYN 包,但是没响应 Image
因为这个服务跑在容器里,那么第一反应是看 iptables ,看下 chain 中是否有 drop 掉回包的情况。经过排查没有。且得知服务是 --network=host 启动的。那么大概率不是 iptables 的问题了。
由于三次握手的操作是纯内核操作,所以有可能是内核里有奇怪的设置。按照“先止血,再查问题”的原则,我建议先摘掉这个节点的流量,然后重启服务看是否能先止血。
这个时候网友提供了一个很关键的信息。
这个服务是启动之后接入一段时间流量后出现这样的问题。重启也会稳定复现,那我心里有谱了(要是第一时间能提供这个信息就能一眼丁真了(逃
这个问题大概率出在全链接队列和半连接队列上
众所周知,Linux 内部的链接处理逻辑是这样。首先接到 syn 后,创立一个 sock,放入半连接队列,然后回复 syn+ack ,三次握手完毕后,放入全链接队列,accept 后,从全链接队列里移除。这两个队列满了都会导致 sock 被 drop 掉。鉴于一直没有回复 ack,那么大概率是半连接队列满了
让他们执行下 netstat -s | egrep “listen|LISTEN” 命令
第二条就能得到很明确的结果,在半连接阶段,sock 就被 drop 了
在 Linux 6.2.5 下,处理这段代码的逻辑在 elixir.bootlin.com/linux/v6.2.5/s… Image
然后找了个网图来介绍下半连接的drop 逻辑
最后可以用这个 ebpf 脚本来获取内核中的具体事件 github.com/Zheaoli/linux-…
差不多这样,希望对大家有帮助 Image

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Nadeshiko Manju

Nadeshiko Manju Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @Manjusaka_Lee

Jan 4
今晚帮群友排查了一个相对冷门的问题,记录出来,希望能有帮助

简而言之,群友的代码(涉及大量的小文件写入),运行在 Docker 里面,走 --mount bind 挂载云盘,在创建文件的时候出现 no space left on device,确认过 inode 之类的都没问题,然后整体排查思路如下(1/N)
1. 因为 mount bind 这个行为不同版本上内核有差异,首先让群友提供 df -h 的结果看下挂载点是否处理正确,然后正确
2. 群友提供信息这个是云盘,我让群友确认下是具体的 ESSD 还是 NAS 这种走 NFS 挂载的 Block Device(这块也有坑)。确认是标准的 ESSD 后进入第三部((排除云厂商问题)(2/N)
3. fdisk -l 看一下具体的结果,mount --bind 在跨文件系统挂载下是有坑的,确认都是 ext4 没问题。
4. 然后群友说在出问题的目录下直接 echo 没问题。我心里差不多有底了(再排除下云厂商 resize 的问题就可以进入最终的定位了)
5. 排除 resize 的问题后,我登录到机器,做了这样几个操作(3/N)
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(