用 segfault 捕捉连接异常

文章探讨了一种利用segfault信号处理TCP连接失败突增的监控方案。当连接失败增加导致缓冲区溢出时,触发segfault,通过信号处理器获取详细信息。虽然这种方法可能无法正式上线,但作者认为其效率高,挑战主要来自于segfault通常被视为程序错误的标志,而非有意触发的事件。
摘要由CSDN通过智能技术生成

昨天跟同事讨论一个流量异常监控问题,想起了前年一个未完成的方案。大致需求是:捕捉到 TCP 连接失败数量突增时,下一个深度 hook,获取更详细信息。

好处是在没有异常时也没有 hook,不影响正常流量。

问题在于如何捕捉异常,大致可有轮询和中断两种方式,方法也不一而足,之所以记录这篇文章是因为我当时的方法利用了 segvfault:

  • 发生连接失败,内核则往一个 user-space 的定长 buffer stack 里塞入元组信息。
  • 启动一个进程挂载 segfault 信号 handler,以一定速率从 buffer stack 读出数据,读了就扔掉。
  • 一旦有突发连接失败,buffer 必溢出,触发非法内存访问,segfault 处理 handler 里读出元组,就知道是谁了。

segfault 由工作在最底层的内存访问逻辑触发,效率最高,且谁也绕不过,简单粗暴。但正如同事所说,这种方法无法正式上线。我觉得也未尝不可,可能只是大家对 segfault 的偏见,总觉得它是一种程序本身出了事才会触发的信号,正如雨天打不上车就装疯报警让警车送一样。但 segfault 可能只是名字取的不好,叫 segevent 可能会好些。

浙江温州皮鞋湿,下雨进水不会胖。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值