Охота на утечки горутин: новый профиль в Go
Доклад принят в программу конференции
Целевая аудитория
Тезисы
Утечки горутин — скрытая и опасная проблема в 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