簡體   English   中英

IIS 8.5單工作進程與Web Garden性能

[英]IIS 8.5 single worker process vs Web Garden performance

我有簡單的ASP.NET應用程序,它只使用ImageResizer調整圖像大小,並且不執行任何其他操作。 出於測試目的,我禁用了磁盤緩存,因此每次請求都會調整圖像大小。

當我使用JMeter測試應用程序的性能時,我得到以下平均響應時間:

  • 單個工作進程,1個並發客戶端:~200ms
  • 單個工作進程,10個並發客戶端:~1200ms
  • 4個工作進程,10個並發客戶端:~300ms

如您所見,當我運行單個工作進程和10個並發客戶端時,盡管有可用的硬件資源,響應時間也會急劇增加:性能測試期間的CPU使用率約為30%,內存使用量約為150MB。

這里所討論的,

Web園的設計只有一個原因 - 提供不受CPU約束但執行長時間運行請求的應用程序能夠擴展並且不會耗盡工作進程中可用的所有線程。

這似乎不是我的情況。

我不明白為什么會得到這樣的結果。 我所期望的是,即使是單個工作進程也會提供可接受的響應時間,直到達到資源限制。 10個並發客戶端絕對不是一個重負載。 有人可以向我解釋,我錯在哪里?

我的配置:

  • Windows Server 2012 R2
  • IIS 8.5具有所有默認設置(MaxWorkerThreads除外)
  • 四核i3 3.4GHz CPU
  • 16 GB RAM

我的應用程序只是帶有ImageResizer的空ASP.NET MVC應用程序,在此指令中添加(選項3 - 手動安裝)並在Web.config中禁用DiskCache插件

@ Ben的評論我找到了答案。

問題是基於GDI +(為上注明ImageResizer 它的網站 ),其中包含內部鎖(見這個這個職位了解詳細信息)。 這就是為什么它在單個過程中運行得如此緩慢。

在找到問題的原因之后我嘗試了這個解決方案 從ASP.NET應用程序引用WPF程序集可能不是最好的主意,但它可以用於測試目的。

現在,當我執行與問題相同的性能測試時,我得到以下結果:

  • 單個工作進程,1個並發客戶端:~90ms
  • 單個工作進程,10個並發客戶端:~120ms
  • 單個工作進程,40個並發客戶端:~190ms
  • 單個工作進程,60個並發客戶端:~400ms
  • 單個工作進程,80個並發客戶端:~630ms

如您所見,現在應用程序工作得更快。 它也充分利用了高負載下幾乎所有可用的CPU資源,正如我最初預期的那樣。

因此,如果您在ASP.NET應用程序中處理圖像:

  • 如果可以的話,不要使用基於GDI +的解決方案
  • 如果必須使用GDI +,請在應用程序池的設置中增加MaxWorkerProcesses

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM