Rpc调用的时候偶尔崩溃,但是代码上应该只会打印日志,不会停止服务,可是服务却异常停止。经排查只是一个地方用错了日志打印,当时选择了log.Fatalf函数打印异常日志。此函数会导致程序异常停止服务,且不会执行defer函数。下面是源码
进入Fatalf函数
执行了logger.Exit方法
进入这个方法发现执行了os.Exit方法
从os.Exit方法可以看出来,这里是程序立即停止,且defer函数不会执行,这也是为什么一行异常日志会导致整个服务停止的原因,改成log.Printf函数解决问题