我有一个在 Visual Studio 2010 和 Mono Develop 2.8 上开发的 C# 服务器。NET 框架 4.0
看起来这个服务器在 Windows 上的表现比在 Linux 上好得多(在可扩展性方面)。我使用 Apache 的 ab 工具在原生 Windows(12 个物理内核)、8 核和 12 核 Windows 和 Ubuntu 虚拟机上测试了服务器可扩展性。
Windows 响应时间几乎是平坦的。当并发级别接近/超过核心数量时,它开始回升。
由于某种原因,Linux 响应时间要差得多。从并发级别 5 开始,它们几乎呈线性增长。8 核和 12 核 Linux VM 的行为也类似。
所以我的问题是:为什么它在 linux 上表现更差?(我该如何解决这个问题?)。
请查看随附的图表,它显示了完成 75% 请求的平均时间与请求并发的函数关系(范围栏设置为 50% 和 100%)。
我有一种感觉,这可能是由于 mono 的垃圾收集器。我尝试使用 GC 设置,但没有成功。有什么建议吗?
一些额外的背景信息:服务器基于一个 HTTP 侦听器,该侦听器可以快速解析请求并将它们排队到线程池中。线程池负责用一些密集的数学来回复这些请求(在大约 10 秒内计算出答案)。