Я пытаюсь провести стресс-тест нашего Go сервиса в Куберне. Сервис - это просто http-сервер, который принимает запросы, отправляет запросы другому сервису, выполняет некоторые операции со строками и возвращает ответ на исходный запрос.
Мы начали с
cpu.requests = 1
cpu.limit = 2
Note: host VM has 6 CPUs
С следующий тестовый сценарий:
Repeat for 20 times:
1. Send 40 parallel requests
2. Sleep for 200ms
Мы обнаружили, что Gomaxprocs по умолчанию установлен в 6 (в соответствии со спецификациями хоста), и мы получаем тайм-аут сетевого ввода-вывода после некоторых итераций теста. Кроме того, потребление ресурсов процессора через некоторое время падает до 0 (есть идеи, что здесь может произойти? Go Планировщик времени выполнения зависает?)
Проблема решается путем явного задания Gomaxprocs значения 1.
Некоторые основы c Google привели меня к статье типа https://github.com/uber-go/automaxprocs/issues/12 Но не так много других статей / документов, которые предупреждают нас об этом поведении GOMAXPROCS на kubernetes.
Помощь оценена:
- Любые другие статьи, в которых рассказывается о том, как неправильно сконфигурированные GOMAXPROCS влияют на Go службу в kubernetes?
- Что делать, если для cpu.requests установлено значение 500mCPU? GOMAXPROCS = 1 все еще адекватен? или это просто означает, что cpu.requests должен быть не менее 1?