У меня есть сервер С#, разработанный как на Visual Studio 2010, так и на Mono Develop 2.8.NET Framework 4.0
Похоже, что этот сервер ведет себя намного лучше (с точки зрения масштабируемости) в Windows, чем в Linux. Я проверил масштабируемость сервера на родной Windows (12 физических ядер) и 8 и 12 ядер Windows и Ubuntu Virtual Machines с помощью Apache ab tool.
Время отклика окон довольно плоское. Он начинает собираться, когда уровень concurrency приближается/преодолевает количество ядер.
По какой-то причине время ответа linux намного хуже. Они растут почти линейно, начиная с 5 уровня concurrency. Также 8 и 12 ядер Linux VM ведут себя аналогичным образом.
Итак, мой вопрос: почему он хуже работает на Linux? (и как я могу это исправить?).
Пожалуйста, взгляните на прилагаемый график, в котором показано усредненное время для выполнения 75% запросов в зависимости от запросов concurrency (диапазон диапазона установлен на 50% и 100%).
У меня такое ощущение, что это может быть связано с Mono Garbage Collector. Я пытался играть с настройками GC, но у меня не было успеха. Любое предложение?
Дополнительная дополнительная информация: сервер основан на прослушивателе HTTP, который быстро анализирует запросы и ставит их в очередь на пул потоков. Пул потоков отвечает за ответ на эти запросы с некоторой интенсивной математикой (вычисление ответа через ~ 10 секунд).