Я пытаюсь протестировать многопоточное приложение на своем новом сервере HP Proliant, который имеет 2x Opteron 6272 и 64 ГБ оперативной памяти.
Когда я запускаю приложение на настольном компьютере (ряд процессоров i7 и Xeon X5675), приложение заставляет все ядра загружаться почти на 100%.
Когда я запускаю приложение на своем сервере, независимо от того, сколько потоков я запускаю, общее использование ЦП приложением колеблется в районе 20-25%. То есть, если я работаю с 32 потоками, все 32 ядра будут зависать примерно на 20%, если я запускаю 16 потоков, они будут зависать примерно на 40% и так далее.
Меня озадачивает эта проблема. Кто-нибудь знает, что могло вызвать это?
Если ваше приложение обрабатывает большой объем данных, попробуйте следовать по пути к данным - если входные данные поступают из сети, проверьте возможные задержки, ограничения полосы пропускания или ошибки передачи. Вы уже проверили дисковый ввод-вывод, который в противном случае мог бы стать узким местом.
И последнее, но не менее важное: поскольку это многопоточное .NET-приложение, вы должны убедиться, что сборка мусора на сервере используется, иначе вы можете увидеть странные характеристики нагрузки, как описано в этом посте из переполнения стека.