В релизе Go 1.25, вышедшем в августе 2025 года, появилась встроенная поддержка чтения лимитов CPU из cgroup. Ранее для этого требовалась библиотека automaxprocs, которая принудительно задавала GOMAXPROCS. Теперь наличие импорта этой библиотеки в коде отключает нативное автообновление рантайма, так как библиотека фиксирует значение при запуске и блокирует дальнейшие изменения.
Алгоритмы работы различаются: Go 1.25 округляет лимиты вверх и устанавливает минимум в два процессора для корректной работы сборщика мусора. Библиотека automaxprocs округляет значения вниз, допуская работу на одном ядре. При квотах вроде 1500m это приводит к разному числу планировщиков, что критично для производительности микросервисов в Kubernetes.
Для всплесковых нагрузок подход Go 1.25 с использованием двух процессоров сокращает хвосты задержек в три раза по сравнению с ограничением в один поток. Однако на ровной нагрузке округление вверх может вызвать троттлинг со стороны CFS. Разработчикам рекомендуется проверить тип нагрузки сервиса перед удалением библиотеки или изменением настроек GOMAXPROCS.
Рантайм Go 1.25 умеет динамически перечитывать лимиты, но эта функция не активируется, если GOMAXPROCS задан через переменные окружения или библиотеку. Поведение рантайма определяется версией Go, указанной в go.mod. Для включения новых механизмов в старых проектах можно использовать директивы godebug containermaxprocs=1 и updatemaxprocs=1 непосредственно в файле go.mod.





