
我正在設定一個開發伺服器,並希望將其設定為使用 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 的表現確實非常好。