Оптимизация работы Go-приложений в Docker
Основная проблема выполнения Go-приложений в Docker
описана здесь.
Вкратце, её можно сформулировать так: если не оптимизировать работу Go-приложения в Docker
то встроенный сборщик мусора может 'захватить' всё процессорное время и замедлить полезную работу.
Основным решением этой проблемы является работа с переменной окружения GOMAXPROCS
при запуске go-приложений в Docker
или использование соответствующей библиотеки, автоматизирующей этот процесс.
Пример запуска docker-контейнера с использованием данной переменной окружения
$ docker run --cpus=4 -e GOMAXPROCS=4 -p 8080:8080 $(ko build -L main.go)
$ docker run --cpus=4 -e GOMAXPROCS=4 -p 8080:8080 $(ko build -L main.go)
Ссылки и дополнительная информация
- Go, Containers, and the Linux Scheduler
- A Guide to the Go Garbage Collector
- Garbage Collection In Go
- Automatically set GOMAXPROCS to match Linux container CPU quota.
- Go's Garbage Collection: как работает и почему это важно знать
- Оптимизация памяти и управление сборщиком мусора в Go: GOGC и GOMEMLIMIT
Коментарии
Остались вопросы, появились идеи для обсуждения или просто хотите оставить отзыв? Буду рад любой обратной связи!
Вместо авторизации в приложении giscus , вы также можете оставлять комментарии непосредственно на GitHub, с которым связанна данная ветка комментариев.
Похожие записи
Доступ к Docker Hub
Обход блокировки досутпа к Docker Hub с помощью прокси-сервера
Комментарии в блоге с Giscus
Система комментариев на основе GitHub Discussions.