Janus API 网关崩溃日志分析

长期运行正常的Janus API GW昨晚崩溃了一次。
通过docker container的log路径,找到日志文件,保存了最后一段。

panic: runtime error: invalid memory address or nil pointer dereference\n
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa66e15]\n
\n
goroutine 39 [running]:\n
github.com/hellofresh/janus/pkg/plugin/oauth2.(*FileSystemRepository).FindAll(0x0, 0xd3afe6, 0xa, 0x0, 0x0, 0x0)\n
\u0009\u003cautogenerated\u003e:1 +0x5\n
github.com/hellofresh/janus/pkg/plugin/oauth2.(*OAuthLoader).getOAuthServers(0x0, 0xe63f80, 0x0, 0x0, 0x0, 0x0)\n
\u0009/janus/pkg/plugin/oauth2/loader.go:80 +0x49\n
github.com/hellofresh/janus/pkg/plugin/oauth2.(*OAuthLoader).LoadDefinitions(0x0, 0xe63f80, 0x0)\n
\u0009/janus/pkg/plugin/oauth2/loader.go:25 +0x3f\n
github.com/hellofresh/janus/pkg/plugin/oauth2.onReload(0xc39440, 0xc00021e900, 0xd35a79, 0x6)\n
\u0009/janus/pkg/plugin/oauth2/setup.go:60 +0x5a\n
github.com/hellofresh/janus/pkg/plugin.EmitEvent(0xd35a79, 0x6, 0xc39440, 0xc00021e900, 0x0, 0x0)\n
\u0009/janus/pkg/plugin/plugin.go:99 +0x177\n
github.com/hellofresh/janus/pkg/server.(*Server).handleEvent(0xc0003e5500, 0xc0001f1380)\n
\u0009/janus/pkg/server/server.go:336 +0x14c\n
github.com/hellofresh/janus/pkg/server.(*Server).listenProviders(0xc0003e5500, 0xc00052efc0)\n
\u0009/janus/pkg/server/server.go:237 +0x161\n
created by github.com/hellofresh/janus/pkg/server.(*Server).StartWithContext\n
\u0009/janus/pkg/server/server.go:94 +0x2c7\n

看来是空指针导致的函数崩溃。
janus是GO 写的,类似C++,空指针导致主线程出错,就会导致进程整体崩溃。
不是Java那样的异常导致某个子线程处理失败,不影响进程。

分析:
去看崩溃函数的最新源代码:
https://github.com/hellofresh/janus/blob/master/pkg/plugin/oauth2/file_repository.go
已经重构过,没有这个接口了,肯定有更新的、更稳定的镜像版本

建议用最新3.8.22 (2020/1/20)
替换使用,暂时看正常,稳定性待观察。
(老版本是3.8.11-rc4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值