Назад | Перейти на главную страницу

Приложение C # (моно), работающее внутри докера, вызывает огромные скачки ЦП

Я давно на это смотрю. Мы запускаем сервер с несколькими контейнерами Docker, в одном из которых есть серверное приложение Mono, написанное на C #.

Базовое изображение - это phusion base (http://phusion.github.io/baseimage-docker/)

Это хорошо работает до сих пор, сегодня вечером мы внезапно начали замечать огромные скачки производительности процессора, замедляющие работу всего нашего веб-сайта, даже делая его полностью недоступным.

Я ничего не менял примерно неделю. Я очень сомневаюсь, что эта проблема возникла из-за ошибки исходного кода. Также одно и то же приложение (как и тот же исполняемый файл) отлично работает на том же сервере вне докера или на моем Mac. Вещи, которые я пробовал:

См. Снимок экрана нашего дерева процессов:

Если бы кто-нибудь мог нам помочь, это было бы здорово! Я более чем готов сообщить подробности;) Заранее большое спасибо!

Хорошо, я нашел это! По-видимому, процесс застрял в цикле while, потому что он слушал команды в stdin.

Скачки ЦП были всегда, но мы никогда не замечали (до тех пор, пока мы не провели более крупный тест с большим количеством людей на сайте), поэтому после поиска я обнаружил, что вы можете сделать это, чтобы `` закрыть '' стандартный ввод, чтобы он не продолжал читать данные в фоновом режиме:

read x < /dev/fd/1 | <command>

Где команда - это ваша команда, которая загружает процессор.

Для меня полная команда была:

cd /opt/SteamBot && read x < /dev/fd/1 | mono --debug SteamBot.exe

CPU упал до 7%;)