Высокая загрузка памяти в приложении Golang, развернутом в кластере kubernetes - PullRequest
0 голосов
/ 12 февраля 2020

У нас есть сервис изображений, написанный на Golang.

  1. Поддерживается работа с изображением, например, размытие при изменении размера.
  2. RPS составляет около 400.
  3. Pod Config: 16 ГБ ОЗУ и 8 ядер
  4. Мы развернули приложение и наблюдали в течение дня, оно показало высокую загрузку ядра
  5. Мы ввели балласт (https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2/) объемом 4 ГБ и пул Syn c (* 1016) *) для устранения основных проблем
  6. Затем мы начали наблюдать высокое использование памяти.
  7. Следовательно, мы сократили Балласт до 1 ГБ, но использование памяти все еще остается высоким
  8. Согласно к этой статье https://www.bwplotka.dev/2019/golang-memory-monitoring/ Goland версии 1.12+ сообщил о высоком RSS Согласно статье "Это не означает, что им требуется больше памяти, это просто оптимизация для случаев, когда нет другого давления памяти. "
  9. Чтобы убедиться, что мы выполнили небольшое ПО C на локальном компьютере для проверки выше, и это сработало.
  10. Локальная настройка - память контейнера - 500 МБ
  11. Память будет постоянно увеличиваться, если бы она может оставаться там на 450 МБ, пока давление не увеличится. Как только давление увеличится, объем памяти уменьшится с go до 4 МБ.
  12. Но этот кластер PO C не сработал на кластере Kubernetes, и модули начали падать и перезапускаться, когда объем памяти достигал ~ 16 ГБ ОЗУ на высоких RPS например, 400.

Может кто-нибудь подсказать, как мы можем содержать эту проблему с памятью и почему этот кластер PO C не сработал в кластере.

Дайте мне знать, если потребуется более подробная информация ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...