2015-08-12 3 views
1

Мое nancy-приложения используют 100% -ный процессор без их фактического использования.Нэнси на Linux использует 100% -ный процессор

Они работают внутри контейнера-докера на моно. Единственное, что я мог думать о том, чтобы привести к этому, будет бесконечный цикл в моей главной функции, что-то вроде

while(Console.ReadLine() != "quit") {} 

, но я думал, Console.ReadLine() будет блокирование и поэтому этот цикл будет выполнять только, когда есть некоторые вход, который не должен быть когда-либо. Эми, я чего-то не хватает? Существуют ли другие причины, по которым nancy может использовать весь процессор в моно? - В Windows во время разработки он работает нормально.

Update:

Применение в докер просто начал с mono NancyServer.exe. Использование памяти намного ниже, чем предыдущая версия XPS (50-70 МБ вместо 160-180 МБ), но приложение на основе XPS использует менее 0,1% процессора (также ничего не делает)

ответ

3

Я могу воспроизвести нелипкая, запуская контейнер на передний план, если ни один из -t or -i options не используются. В этом конкретном случае Console.ReadLine() не будет блокироваться.

Если используется либо -i, либо -t, то Console.ReadLine блоков. Также, если я запускаю контейнер в фоновом режиме (с -d option), Console.ReadLine() блокирует.


Обязательно используйте либо -t или -i, если вы используете свой контейнер на переднем плане.

+0

Он работает в фоновом режиме, я проверю точные параметры и вернусь к вам – peter

+0

из все флаги ('-i',' -t', '-d') Я устанавливаю только' -d' И вы сказали, что '-d'' Console.ReadLine() 'блокировался для вас, или? Вы построили контейнер поверх изображения «mono»? – peter

+0

Я построил изображение поверх изображения 'mono' и объединил ваш цикл while в [this] (http://www.mono-project.com/docs/getting-started/mono-basics/) example + 'CMD sh -c" mcs hello.cs && mono hello.exe "' – Thomasleveil

1

Высокий Нагрузка процессора вызвана тем, что цикл while, потому что вы не ставите текущий поток на сон на короткое время. Как:

while(Console.ReadLine() != "quit") {Thread.Sleep(10);} 
+0

но не должен блокировать 'Console.ReadLine' и ждать, пока я ничего не наберу? - чего никогда не должно было случиться. Теперь я изменил его для сна для Int32.MaxValue (примерно 23 дня) - посмотрим, действительно ли это была проблема – peter