Выполнение нескольких исполняемых файлов на сервере
Привет,
Я разработал приложение, которое обрабатывает строки. Единственное, что он делает - берет строку из базы данных, обрабатывает ее и отправляет результаты обратно. Таким образом, он обрабатывает 1 Задание (1 строку) примерно за 200 мс, если мы считаем процессорное время, а я считаю процессорное время вот так:
1. получите процессорное время до начала работы
Process.GetCurrentProcess().TotalProcessorTime.TotalMilliseconds
2. я получаю то же самое процессорное время после завершения задания и вычитаю значения.
Теперь-все в порядке, если я начну 100 из этих исполняемых файлов на одном сервере. Общее потребление ЦП сервера (48 ядер машины) составляет около 10%, а среднее время обработки одного задания (в среднем через все 100 процессов) составляет около 200-300 мс.
Странности начинают происходить, когда я запускаю 200 из этих исполняемых файлов (в 2 раза больше, так что можно было бы ожидать, что общая загрузка процессора сервера составит около 20%). Но... Загрузка процессора на сервере начинает расти до 100%, и среднее время обработки одного задания составляет ~2000-4000 МС (в 10-20 раз больше).
Есть идеи, что здесь происходит? может быть, в коде есть какой-то изъян? Или это что-то с управлением серверными процессами.
Сервер является стандартом Windows Server 2008 R2. Но, похоже, это происходит и на srv 2012.
Приложение написано с .net 4.5 (но я построил его с 4.6.1, чтобы проверить тоже - все еще prolem с 200 процессами)
Заранее спасибо за любые подсказки или предложения.
br,
ИГН
Что я уже пробовал:
проверил код c# приложения, похоже, нет ничего, что могло бы привести к утечке процессора. тестировался на win srv 2008 и 2012 годов.
молиться Богу... но не ответил...
Jon McKee
Быстрый вопрос: Какова загрузка процессора, когда вы начинаете 50 по сравнению со 100 по сравнению с 200? Наличие этого низкого уровня 50 может быть полезно для определения того, является ли это проблемой масштабирования кода.
MK-Gii
ussage процессора на уровне 50 довольно низок. удары от 5 до 10 с пиками. в целом эта обработка является низкоинтенсивной, но по некоторым причинам, когда я запускаю несколько процессов, она значительно увеличивается.
Точка разрыва - это что - то около 120-125. После этого процессор начинает достигать пика от ~10-15% до 100, и через некоторое время половина времени остается на уровне 100% использования процессора.