skeyevss-performance 长任务Panic隔离与协程恢复源码设计
试用安装包下载 | SMS | 在线演示开源项目地址https://github.com/openskeye/go-vss背景VSS 长期运行任何nil 指针、越界、第三方库 bug都可能触发 panic。若 panic 发生在唯一的 SIP 发送循环或 Catalog 定时器里会导致整类信令崩溃。本仓库对「长生命周期任务」采用defer recover 休眠重启的策略把故障限制在单次崩溃并自动拉起。项目中的做法SipProc.DO包装每个SipProcLogicserver/sip.go中SipProc.DO对每个注册的 LogicFetchDataLogic、SendLogic、CatalogLoopLogic等启动 goroutine并在参数里注入RecoverCallrecover()捕获栈打日志time.Sleep(1 * time.Second)防止 panic 死循环刷日志递归调用p.DO(options...)把同一组任务整批重启。DO: 每个 Logic 一个 goLogic.DO主循环panicrecover LogError StackSleep 1sp.DO(options...) 重启整批与「子 proc」的关系部分 Logic 内部还有子 goroutine如CatalogLoopLogic里go l.proc()子协程若 panic 且未 recover仍会进程崩溃。当前主要防护在外层 DO对特别关键的proc可再加一层 recover后续增强点。要点1秒退避避免故障依赖如 DB 挂了时CPU 空转 日志洪峰。整批重启一次DO重启所有 Logic需保证无全局脏锁若某 Logic 重启两次可能重复 Listen当前 SIP Listen 在 main 不在此DO内风险主要在业务循环。根因仍需修recover 是保命不是修复线上应配告警对接日志关键字Recover。相关代码路径core/app/sev/vss/internal/server/sip.go—SipProc.DO、RecoverCallcore/app/sev/vss/main.go— 注册的所有gbs_proc/procLogic
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2545237.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!