Я давно на это смотрю. Мы запускаем сервер с несколькими контейнерами 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%;)