goc icon indicating copy to clipboard operation
goc copied to clipboard

在1.3.9的版本中,通过k8s启动的定时任务服务,在执行完成后,pod节点被删除,但是goc list里的实效ip没有被删除

Open susanaochaonan opened this issue 3 years ago • 8 comments

susanaochaonan avatar Dec 13 '21 01:12 susanaochaonan

ip 不会主动删除,需要手动清除, goc remove

lyyyuna avatar Dec 14 '21 03:12 lyyyuna

设计上确实希望退出时清理IP。这里如果实际没有,那就可能是有bug。

是否可以帮忙调试下呢?

  1. 首先看看退出时,被测程序是否打印了这行log: https://github.com/qiniu/goc/blob/master/pkg/cover/instrument.go#L299
  2. 同时看看goc server这一侧,是否接收到remove的情况,代码实现在这里: https://github.com/qiniu/goc/blob/master/pkg/cover/instrument.go#L262

信息越足,越方便我们定位问题。谢谢~ @susanaochaonan

CarlJi avatar Dec 15 '21 01:12 CarlJi

@CarlJi 程序自己退出(无论正常或异常)不会有 signal。

使用 os/signal 也有缺点,用户程序原有的 signal 可能会比注入的 signal 先执行退出,导致 deregister 失败。

根本原因是 Go 里面没有提供 atexit 行为,见讨论,所以没有一种万全的方法来做全局的 "catch"。并发情况下一种全局的退出兜底方案是不存在的。

lyyyuna avatar Dec 15 '21 07:12 lyyyuna

@CarlJi 程序自己退出(无论正常或异常)不会有 signal。

使用 os/signal 也有缺点,用户程序原有的 signal 可能会比注入的 signal 先执行退出,导致 deregister 失败。

根本原因是 Go 里面没有提供 atexit 行为,见讨论,所以没有一种万全的方法来做全局的 "catch"。并发情况下一种全局的退出兜底方案是不存在的。

部分场景有效也是好的。我们能明确目前方案的局限就好。

CarlJi avatar Dec 15 '21 15:12 CarlJi

当goc服务停止重启后,如果有服务在goc停止时间内停止了,将会出现list有无效ip的问题 用的方式是在profile --force指令里判断是否清理,再加了一个定时任务的方式 发现在建立连接时好像没有定义超时时间

zhanglianxin123 avatar Dec 28 '21 00:12 zhanglianxin123

当goc服务停止重启后,如果有服务在goc停止时间内停止了,将会出现list有无效ip的问题 用的方式是在profile --force指令里判断是否清理,再加了一个定时任务的方式 发现在建立连接时好像没有定义超时时间

"建立连接时好像没有定义超时时间" 这里是否可以具体下? @zhanglianxin123

CarlJi avatar Dec 28 '21 05:12 CarlJi

当goc服务停止重启后,如果停止结束,将出现有登录ip的问题用的方式是在配置文件中——强制指令里判断是否清理,还有一个定时任务的方式发现在建立连接时好像没有超时时间

“建立连接时好像没有超时时间”这里是否可以具体下?@zhanglianxin123

就是在cover.NewWorker(addrInfo).Profile(cover.ProfileParam{})这里不是需要建立连接吗,然后没看到timeout的设置

zhanglianxin123 avatar Dec 28 '21 06:12 zhanglianxin123

fixed at #321

timandy avatar Dec 06 '22 07:12 timandy