我正在设置一个开发服务器,并希望将其设置为使用 Mono 为 ASP.NET 页面提供服务。我计划使用 Cherokee 和 Mono (http://www.cherokee-project.com/doc/cookbook_mono.html)并且想知道是否有人做过任何性能测试,比较基于 Unix 的堆栈和基于 Windows 的堆栈。
答案1
在测试 Mono/Linux 与 .NET/Windows 工作负载时,您必须记住,发挥作用的不仅仅是运行时环境。
Linux 在某些方面比 Windows 表现更好(大多数 IO 和网络操作对于类似的 C 程序来说往往更快)。同时.NET拥有更先进的垃圾收集器和更先进的JIT编译器。
当谈到类库时,它实际上取决于您使用的代码路径。正如 JacksonH 在上一篇文章中所说,您可以访问在一个实现中已优化的代码路径,但在另一个实现中则不然,反之亦然。
在 ASP.NET 工作负载上,您必须记住,默认设置会将所有传入请求路由到单个“工作”进程,mod_mono 和 Cherokee 使用类似的方法:
(来源:mono-project.com)
至少在 Apache 中,我们支持一种机制,您可以将应用程序工作负载分配给多个工作线程,这在高负载下很有帮助,因为它避免了任何进程内锁定,并为每个工作线程提供了一个完整的线程池来工作:
(来源:mono-project.com)
有关如何配置此设置的详细信息可在此处找到:
答案2
这有点没有答案。然而这里并没有真正的答案。不幸的是,这个东西高度依赖于应用程序。您的应用程序可能会遇到 Mono 恰好做得很好的东西,或者您可能会大量使用实现不佳或存在一些错误的东西。这并不是 Mono 比 IIS 慢/快 X 倍的情况。
我的建议是,将您的应用程序部署在两个不同的 EC2 实例(一个 Windows 和一个 Mono)上,并在那里进行测试。如果您发现 Mono 实例存在重大问题,请报告它们,我们将尽力改进问题。
话虽如此,我可以根据个人经验告诉您,Mono aspx 的性能确实非常好。