Сервер gRPC останавливается без причины

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

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


person Karina sarkisovae    schedule 12.05.2019    source источник
comment
Нет, это ненормально. У вас есть доступ к журналам консоли вашего сервера? Должна быть паника или какая-то другая ошибка времени выполнения, чтобы остановить сервер. Консоль даст понять, почему это так. Также поможет либеральное использование log.   -  person colm.anseo    schedule 12.05.2019
comment
@colminator Я использую экземпляр amazon aws ec2, и он у меня есть. Мне просто нужно, чтобы ты сказал мне, где это найти. : /   -  person Karina sarkisovae    schedule 12.05.2019
comment
AWS: Получение вывода консоли   -  person colm.anseo    schedule 12.05.2019


Ответы (3)


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

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

person Solorad    schedule 13.05.2019

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

person Shahed Ahmed    schedule 12.05.2019

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

person ukurik    schedule 13.05.2019