0

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

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

4

3 回答 3

2
  1. 您可以添加处理程序恢复部分
import    "runtime/debug"

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)
}

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

于 2019-05-13T02:47:58.660 回答
0

尝试这些选项 1. 检查您的日志,了解它退出之前发生的情况(将日志转储到文件以验证问题) 2. 您是否将任何外部包添加到导致此问题的代码库?

于 2019-05-13T01:35:38.033 回答
0

我最近在学习 golang,我发现 go lang 错误处理不同。如果你想要它不会强迫你使用 err,糟糕的是它不会向你显示任何东西。所以请检查您的程序是否有任何错误。并且对于专家的帮助,您需要更清楚地了解问题。显示一些代码或指示,人们无法观察到问题出在哪里。只是说我的程序崩溃了会对你有所帮助。

于 2019-05-12T20:57:00.497 回答