记一次rest_api监控提前发现潜在bug

花了大半年开发的项目要上线了,我在上线前一个星期把所有api都加上异常处理,如果api调用引发异常,都会把当前的调用栈和接口入参等信息保存到mongodb中。上线后,并没有收到bug处理通知。但是在mongodb中发现了一些异常数据。其中调用栈如下:

"stack" : "goroutine 5297 [running]:\nerror.getFuncStack(0x0, 0xc420016e75)\n\t/mnt/hgfs/share/golang_common/src/cloudream.com/server/3dmeasuremgbk/src/error/panic_err.go:12 +0x5b\nerror.HandlePanic(0xc420016e75, 0x1d, 0xc420070f00, 0x74, 0xca0de0, 0xecd090)\n\t/mnt/hgfs/share/golang_common/src/cloudream.com/server/3dmeasuremgbk/src/error/panic_err.go:22 +0x1dc\ncontrollers.(*ClothController).GetCloths.func1(0xc42028ab40)\n\t/mnt/hgfs/share/golang_common/src/cloudream.com/server/3dmeasuremgbk/src/controllers/cloth.go:545 +0x138\npanic(0xca0de0, 0xecd090)\n\t/home/wuzm/go/src/runtime/panic.go:491 +0x283\nreflect.Value.Index(0xc91a40, 0xc420174e20, 0x97, 0xc8, 0xc420408c01, 0x16, 0x194)\n\t/home/wuzm/go/src/reflect/value.go:877 +0x1e4\ngithub.com/go-xorm/core.ReflectNew(0x1308de0, 0xcd5660, 0xcd5660, 0x1308de0, 0xce85a0)\n\t/mnt/hgfs/share/golang_common/src/github.com/go-xorm/core/rows.go:146 +0x227\ngithub.com/go-xorm/core.(*Rows).ScanMap(0xc420463360, 0xc7fa20, 0xc42024e368, 0xc7fa20, 0xc42024e368)\n\t/mnt/hgfs/share/golang_common/src/github.com/go-xorm/core/rows.go:200 +0x25a\ngithub.com/go-xorm/xorm.(*Session).noCacheFind(0xc4202e2240, 0x0, 0xc92140, 0xc4200d6e20, 0x197, 0xc4204b0b00, 0x530, 0xc420166000, 0xf, 0xf, ...)\n\t/mnt/hgfs/share/golang_common/src/github.com/go-xorm/xorm/session_find.go:259 +0x628\ngithub.com/go-xorm/xorm.(*Session).Find(0xc4202e2240, 0xc69f20, 0xc4200d6e20, 0x0, 0x0, 0x0, 0x0, 0x0)\n\t/mnt/hgfs/share/golang_common/src/github.com/go-xorm/xorm/session_find.go:156 +0x5c4\ncloudream.com/server/3dmeasuremgbk/src/models/mysql.(*ClothHandler).GetCloths(0xc4200d6de0, 0xc42009c9a0, 0x0, 0x0, 0x0, 0x0, 0x0)\n\t/mnt/hgfs/share/golang_common/src/cloudream.com/server/3dmeasuremgbk/src/models/mysql/cloth.go:224 +0xe47\ncontrollers.(*ClothController).GetCloths(0xc42028ab40)\n\t/mnt/hgfs/share/golang_common/src/cloudream.com/server/3dmeasuremgbk/src/controllers/cloth.go:572 +0x518\nreflect.Value.call(0xdee0c0, 0xc42028ab40, 0x2e13, 0xe03e44, 0x4, 0x1363230, 0x0, 0x0, 0xc94f40, 0xb, ...)\n\t/home/wuzm/go/src/reflect/value.go:434 +0x905\nreflect.Value.Call(0xdee0c0, 0xc42028ab40, 0x2e13, 0x1363230, 0x0, 0x0, 0x1363230, 0x0, 0x0)\n\t/home/wuzm/go/src/reflect/value.go:302 +0xa4\ngithub.com/astaxie/beego.(*ControllerRegister).ServeHTTP(0xc42009c630, 0x12ff240, 0xc420338c40, 0xc4204fb100)\n\t/mnt/hgfs/share/golang_common/src/github.com/astaxie/beego/router.go:815 +0x1f06\nnet/http.serverHandler.ServeHTTP(0xc42011a820, 0x12ff240, 0xc420338c40, 0xc4204fb100)\n\t/home/wuzm/go/src/net/http/server.go:2619 +0xb4\nnet/http.(*conn).serve(0xc420253220, 0x12ffbc0, 0xc420256600)\n\t/home/wuzm/go/src/net/http/server.go:1801 +0x71d\ncreated by net/http.(*Server).Serve\n\t/home/wuzm/go/src/net/http/server.go:2720 +0x288\n",

从调用栈可以看出,是golang的xorm中抛出的异常,异常信息为:

"reflect: slice index out of range"

然后我自己再调用的时候发现并没办法重现。看xorm对于的代码,感觉逻辑有点绕,就google了下,发现原来原因是xorm版本比较低有个bug,解决办法在github上面有给出:xorm使用scanmap出现slice越界问题

ok,再次验证了无监控不服务的准确性。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值