【发布时间】:2012-05-26 12:30:57
【问题描述】:
我有一个在 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 秒内计算出答案)。
【问题讨论】:
-
什么是“C# 服务器”?和服务器有区别吗?我的意思是,在您的标题中,“C#”是否被用作形容词? “C# 服务器”是一种服务器吗?
-
>一些密集的数学运算(在大约 10 秒内计算出答案)。我认为您的问题就在那里。这不是服务器的典型场景。你的物理硬件有多少个内核,12 个?图表在 10 个并发请求后的样子?
-
据我所知,单声道不适合这些用途。 Mono 的开发主要集中在小型桌面应用程序上。我从 mono 的开发人员那里得到了这些信息,我会尝试找到更多信息,如果我找到了,我会在这里发布。
-
除了 sgen 垃圾收集器,您还应该尝试运行 Mono 的最新(即主干,从存储库编译)版本,最后有很多改进。
标签: c# performance mono scalability server-side