Переопределить остановку профиля golang в случае прерывания
Когда я kill -SIGINT pid
на моем сервисе Golang у меня есть изящное завершение работы, где я вызываю profile.Stop
, но прежде чем я смог позвонить, я получил это сообщение: profile: caught interrupt, stopping profiles
Я даже не могу вызвать профиль. Остановитесь, потому что он срабатывает раньше, однако отключение соединения при прослушивании grpc и couchbase работает правильно.
Могу ли я в любом случае переопределить эту некорректную остановку профиля?
1 ответ
E сть profile.NoShutdownHook
функция, которая контролирует, должен ли пакет профилирования перехватывать SIGINT, для чего можно аккуратно писать профили
Вы можете использовать / передать вышеупомянутую функцию в качестве опции для profile.Start()
если вы хотите отключить это поведение:
profile.Start(profile.NoShutdownHook)
Запуск и остановку профилирования внутри функции лучше всего выполнять с помощью deferred, например:
// disable the automatic shutdown hook.
defer profile.Start(profile.NoShutdownHook).Stop()
Если вы отключите автоматическое отключение, убедитесь, что вы звоните Stop()
вручную в вашем обработчике выключения правильно.