gRPC服务器无故停止

时间:2019-05-12 20:08:16

标签: go grpc grpc-go

我的Go gRPC Server停止了,而我没有自己停止它。 现在,每当我看到服务器每隔30或60分钟没有响应时,我就需要通过输入命令“ go run server.go”来重新启动服务器。

这正常吗?在特定时间后是否需要重新启动服务器?

3 个答案:

答案 0 :(得分:1)

  1. 您可以添加处理程序恢复部分
defer func() {
   if err := recover(); err != nil {
      log.Errorf("Recovered from err: %v\n %s", err, debug.Stack())
   }
}()
  1. 不仅如此:还有一些特定的中间件可以解决此类恐慌:https://github.com/kazegusuri/grpc-panic-handler 来自文档:
import (
    panichandler "github.com/kazegusuri/grpc-panic-handler"
)

func main() {
    uIntOpt := grpc.UnaryInterceptor(panichandler.UnaryPanicHandler)
    sIntOpt := grpc.StreamInterceptor(panichandler.StreamPanicHandler)
    grpc.NewServer(uIntOpt, sIntOpt)
}

当恢复处理程序方法添加得更快时,第二种方法更可靠

答案 1 :(得分:0)

我最近正在研究golang,发现go lang错误处理有所不同。如果您愿意,它不会强迫您使用err,更糟糕的是它不会显示任何内容。 因此,请检查您的程序是否存在任何错误。同时,为了获得专家的帮助,您需要更清楚地了解问题。显示一些代码或指示,使人们无法观察问题出在哪里。只是说我的程序崩溃了对您有任何帮助。

答案 2 :(得分:0)

尝试这些选项 1.在退出之前检查日志,了解发生了什么(将日志转储到文件中以验证问题) 2.您是否在代码库中添加了引起此问题的外部软件包?