Непредсказуемое действие смолы на кубернетесе - PullRequest
0 голосов
/ 09 июля 2019

У нас есть веб-приложение java spring, работающее внутри модуля kubernetes. Действие конечного пользователя приводит к тому, что веб-приложение запускает Runtime.exec-скрипт GoLang, который, помимо прочего, обрабатывает загруженный файл. Размер файла в моем конкретном случае составляет около 700 МБ.

Проблема, с которой мы столкнулись, заключается в том, что время, затраченное на tar для этого файла, очень непредсказуемо. Это может занять от 20 секунд до 10 минут.

Чтобы сузить проблему, мы развернули модуль kubernetes и запустили только команду tar внутри него.

Время широко варьируется в зависимости от объема памяти, выделенной для модуля. При 4 гигабайтах памяти это займет всего 40 секунд, а при 1,5 гигабайтах это может занять много минут.

У меня максимум 1,5 ядра, выделенных для модуля, и потребление никогда не превышает 1 ядра.

При 512 Мб, выделенных для модуля, команда tar занимает около 11 секунд

root@pod-69fc4988c-km99p:/tmp/test# date;time tar -cvf test.tar 
somefile.tar.gz; date
Mon Jul  8 07:11:51 UTC 2019
somefile.tar.gz

real    0m11.313s
user    0m0.009s
sys     0m11.155s
Mon Jul  8 07:12:02 UTC 2019

docker stats at 512 mb

256 При выделении pod 256 МБ команда tar занимает около 3 минут

root@app-hosting-69fc4988c-km99p:/tmp/test# date;time tar -cvf test.tar somefile.tar.gz; date
Mon Jul  8 07:17:36 UTC 2019
somefile.tar.gz

real    2m52.003s
user    0m0.040s
sys     2m51.856s
Mon Jul  8 07:20:28 UTC 2019

Top output inside the pod while tar was running at 256 mb pod memory

docker stats at 256 mb pod memory

Я не могу понять, почему память pod должна быть фактором, отведенным tar, учитывая, что мы никогда не используем всю доступную память, как показано в статистике top или docker.

Какие другие ресурсы могут быть здесь ограничены?

...