Переопределить остановку профиля 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() вручную в вашем обработчике выключения правильно.

Другие вопросы по тегам