Проблема масштабируемости сервера C# в Linux

У меня есть сервер C#, разработанный как для Visual Studio 2010, так и для Mono Develop 2.8. NET Framework 4.0

Похоже, этот сервер ведет себя намного лучше (с точки зрения масштабируемости) в Windows, чем в Linux. Я проверил масштабируемость сервера на родной Windows (12 физических ядер), а также на 8- и 12-ядерных виртуальных машинах Windows и Ubuntu, используя инструмент Apache ab.

Время отклика Windows почти не меняется. Он начинает срабатывать, когда уровень параллелизма приближается/превышает количество ядер.

По какой-то причине время отклика Linux намного хуже. Они растут практически линейно, начиная с 5-го уровня параллелизма. Аналогично ведут себя и 8- и 12-ядерные виртуальные машины Linux.

Итак, мой вопрос: почему он работает хуже на Linux? (и как я могу это исправить?).

Пожалуйста, взгляните на прилагаемый график, он показывает среднее время выполнения 75% запросов в зависимости от параллелизма запросов (диапазон значений установлен на 50% и 100%). time to fulfill 75% of the request as a function of the request concurrency

У меня есть ощущение, что это может быть связано с сборщиком мусора mono. Я пытался поиграться с настройками GC, но безуспешно. Есть предложения?

Дополнительная справочная информация: сервер основан на прослушивателе HTTP, который быстро анализирует запросы и ставит их в очередь в пуле потоков.Пул потоков отвечает на эти запросы с помощью некоторых интенсивных математических вычислений (вычисляя ответ примерно за 10 секунд).

12
задан Frank 22 May 2012 в 20:00
поделиться