суббота, 11 апреля 2020 г.

Статистика и события времени исполнения в Golang

Среда исполнения (runtime) предоставляет пользователям статистику и отчеты о внутренних событиях для диагностики проблем производительности и использования на уровне времени исполнения.

Пользователи могут отслеживать эту статистику, чтобы лучше понять общее состояние и производительность программ Go. Некоторые часто отслеживаемые характеристики и состояния:

  • runtime.ReadMemStats сообщает о метриках, связанных с выделением кучи и сборкой мусора. Статистика памяти полезна для мониторинга того, сколько ресурсов памяти потребляет процесс, может ли процесс эффективно использовать память, и выявлять утечки памяти.
  • debug.ReadGCStats читает статистику о сборке мусора. Полезно посмотреть, сколько ресурсов расходуется на паузы в GC. Он также сообщает временную шкалу пауз сборщика мусора и процентили времени паузы.
  • debug.Stack возвращает текущую трассировку стека. Трассировка стека полезна, чтобы увидеть, сколько в настоящий момент запущено goroutines, что они делают, и заблокированы они или нет.
  • debug.WriteHeapDump приостанавливает выполнение всех goroutines и позволяет выгрузить кучу в файл. Дамп кучи - это снимок памяти процесса Go в данный момент времени. Он содержит все выделенные объекты, а также процедуры, финализаторы и многое другое.
  • runtime.NumGoroutine возвращает количество текущих goroutines. Это значение можно отслеживать, чтобы увидеть, достаточно ли используется goroutines, или для обнаружения утечек goroutines.

Трассировщик исполнения

Go поставляется с трассировщиком исполнения времени исполнения для захвата широкого спектра событий во время исполнения. Планирование, системный вызов, сборка мусора, размер кучи и другие события собираются во время исполнения и доступны для визуализации go tool trace. Трассировщик исполнения является инструментом для выявления задержек и проблем с использованием ресурсов. Вы можете проверить, насколько эффективно используется ЦП, и когда сетевые или системные вызовы являются причиной прерывания для goroutines.

Трассировщик полезен для:

  • Понимания, как выполняются ваши программы.
  • Ознакомления с некоторыми основными событиями среды исполнения, такими как GC.
  • Выявления плохо распараллеленного исполнения.

Тем не менее, он не подходит для выявления горячих точек, таких как анализ причин чрезмерного использования памяти или ЦП. Вместо этого сначала используйте инструменты профилирования для их решения.

Выше визуализация go tool trace показывает, что выполнение началось нормально, а затем оно стало сериализованным. Это предполагает, что может быть конфликт блокировки для общего ресурса, который создает узкое место.

GODEBUG

Среда исполнения также генерирует события и информацию, если переменная среды GODEBUG установлена ​​соответствующим образом.

  • GODEBUG=gctrace=1 печатает события сборщика мусора в каждой коллекции, суммируя объем собранной памяти и продолжительность паузы.
  • GODEBUG=schedtrace=X печатает события планирования каждые X миллисекунд.

Переменная окружения GODEBUG может использоваться для отключения использования расширений набора команд в стандартной библиотеке и библиотеки времени исполнения (runtime).

  • GODEBUG=cpu.all=off отключает использование всех необязательных расширений набора команд.
  • GODEBUG=cpu.extension=off запрещает использование инструкций из указанного расширения набора команд. extension - это имя в нижнем регистре для расширения набора команд, например, sse41 или avx.

Читайте также:


Комментариев нет:

Отправить комментарий