Охота на утечки горутин: новый профиль в Go

Язык и стандартная библиотека

Архитектурные паттерны
Профилирование
Рефакторинг
Методы и техника разработки ПО
Разработка библиотек, включая open source библиотеки
GO
Тестирование новых продуктов
Типовые ошибки

Доклад принят в программу конференции

Целевая аудитория

* Go-разработчики всех уровней. * Инженеры по производительности (Performance Engineers). * Разработчики системного уровня (runtime, низкоуровневые подсистемы). * Разработчики высоконагруженных систем.

Тезисы

Утечки горутин —  скрытая и опасная проблема в Go-приложениях. Легкие и «дешевые» горутины могут превращаться в долговечно работающие зомби, постепенно увеличивая потребление памяти и нагрузку на CPU. Реальные кейсы, такие как инцидент в Uber (×9 рост памяти и +16% CPU), показывают, насколько дорого обходятся такие ошибки в продакшене.

В докладе мы разберем:

  • какие паттерны в Go чаще всего приводят к утечкам горутин;
  • реальные случаи из продакшен-кода и даже самого компилятора Go;
  • как диагностировать проблему с помощью существующих инструментов — например, uber-go/goleak;
  • новый Goroutine Leak Profile, уже добавленный в master-ветку Go и ожидаемый в Go 1.26;
  • какие утечки новый профиль не может найти;
  • практические рекомендации, которые помогут вам защитить свои сервисы от скрытых утечек.

Доклад будет полезен всем, кто разрабатывает Go-сервисы, особенно в высоконагруженных системах.

Арсений Самойлов

Независимый эксперт

Профессионально занимается компилятором Go. Работает над улучшением производительности высоконагруженных серверных приложений на Go.
Задача Арсения — сделать так, чтобы приложения, собранные новым компилятором, работали быстрее.
Контрибьютор в Go:
* профиль на Gerrit: https://go-review.googlesource.com/q/owner:samoylov.arseny@gmail.com
Вот некоторые из проблем, над которыми работал:
* устранение dead-lock'a в Garbage Collector'e — https://go-review.googlesource.com/c/go/+/668795 & https://github.com/golang/go/issues/73499
* ускорение хеш-таблиц — https://github.com/golang/go/issues/77892
* обсуждение нового механизма реалокации стеков горутин — https://groups.google.com/g/golang-nuts/c/q3iZk0phN9E
* проблема кросс-модульного инлайнинга — https://github.com/golang/go/issues/71598
* лишние спилы регистров в прологе функций — https://groups.google.com/g/golang-nuts/c/0JPKvR7D17c/m/HO7cbprEAgAJ

Видео

Другие доклады секции

Язык и стандартная библиотека