Сервер gRPC останавливается без причины - PullRequest
0 голосов
/ 12 мая 2019

Сервер My Go gRPC останавливается без остановки самостоятельно. Сейчас мне нужно снова запустить сервер, введя команду «go run server.go» всякий раз, когда я вижу, что он не отвечает каждые 30 или 60 минут.

Это нормально? Нужно ли перезагружать сервер через определенное время?

Ответы [ 3 ]

1 голос
/ 13 мая 2019
  1. Вы можете добавить в свой обработчик часть восстановления
defer func() {
   if err := recover(); err != nil {
      log.Errorf("Recovered from err: %v\n %s", err, debug.Stack())
   }
}()
Более того: есть специальное промежуточное ПО для улавливания такой паники: 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)
}

Второй подход более надежен, когда подход к обработчику восстановления быстреедобавить

0 голосов
/ 13 мая 2019

Попробуйте эти варианты 1. Проверьте свои журналы того, что происходит прежде, чем это выйдет (сбросьте журналы в файл, чтобы проверить проблему) 2. Вы добавили какой-либо внешний пакет в базу кода, который вызвал это?

0 голосов
/ 12 мая 2019

Я недавно изучаю golang, я обнаружил, что обработка ошибок go lang отличается. Если вы хотите, это не заставит вас использовать ошибку, и плохая часть - это ничего вам не покажет. Поэтому, пожалуйста, проверьте, есть ли в ваших программах ошибки или нет. А также для помощи экспертов, вам нужно быть более ясным в вопросе. Покажите какой-нибудь код или указание, чем люди могут наблюдать, где проблема. Просто сказать, что моя программа потерпела крах, поможет вам все.

...