求大神指教, 如何写一个全局recover,保证服务不会因为go程里面的panic整个挂掉

ywdhzxf · · 3669 次点击
panic是严重的bug, 因为导致程序不能正常运行下去不能自行恢复, 你说的少量情况导致nil, 没有得到处理那也是测试不够细致全面覆盖的缘故, 是工作的失误,并不能靠线上的一个recover就能拯救。如果说recover要看日志,core dump本身就含有错误的详细信息和位置, 严格说来, recover是用来恢复那些可以恢复的panic, 是人为设置的陷阱转向,而不是用来拯救你的bug日志的。线上服务可用是个大命题,你说的那种隐藏的缺陷完全可以用服务器冗余来解决,而不是靠一台所谓高可用的单服务器来带病运行保证所谓的可用。抛开语言本身的坑和操作系统的问题不谈,如果访问量较少就能触发你的panic陷阱,那么可以说你的系统怕是早就千疮百孔了,只不过你的测试用例漏洞百出无法覆盖。这种情况恐怕无法用recover就能解决掉软件的质量问题的。。。
#22
更多评论
polaris
社区,需要你我一同完善!
没法全局,只能每个 gorouitne 自己 recover 自己。
#1
<a href="/user/polaris" title="@polaris">@polaris</a> 如果不考虑go程的话可以监听, 但是go程里面不知道咋监听...
#2