2013-07-19 23 views
2

我在Azure中爲我的Web API配置了JSON壓縮,請參閱此MSDN文章Use AppCmd.exe to Configure IIS at StartupJSON內容壓縮在Azure WebRole一段時間後停止工作

我發佈我的角色並開始測試,根據Fiddler,一切都很好。

下面是一個例子請求頭:

GET http://x.cloudapp.net:8080/api/xyz HTTP/1.1 
Accept: application/json 
Host: x.cloudapp.net:8080 
Accept-Encoding: gzip 

下面是一個例子響應頭:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Content-Encoding: gzip 
Expires: -1 
Vary: Accept-Encoding 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Thu, 18 Jul 2013 22:27:38 GMT 
Content-Length: 2472 

就在幾個網頁API以後調用(如6秒後)的所有響應都不再壓縮。

請求頭部:

GET http://xyz HTTP/1.1 
Accept: application/json 
Host: sp-test-server2012.cloudapp.net:8080 
Accept-Encoding: gzip 

響應頭:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Thu, 18 Jul 2013 22:27:44 GMT 
Content-Length: 16255 

注意丟失的內容編碼在第二響應。

所以我得到了幾百個被壓縮的調用,然後其餘大部分都是未壓縮的。我現在每隔一段時間就會看到另一個響應被壓縮。或者如果我暫時停止測試,然後恢復,似乎壓縮再次開始。

壓縮在IIS 8'扼殺'或什麼?比方說,如果CPU接近最大,IIS是否停止壓縮?

在監控Azure中的WebRole時,在我的重負載測試期間,我的CPU使用率可能會超過90%。很難判斷這是否與結果缺乏壓縮相關。內存使用似乎不是一個問題。

我希望這是更可靠和可預測的!

回答

3

好吧,顯然昨天我的Google Fu失敗了。我今天找到了答案,確實IIS會或不會根據CPU使用情況動態壓縮內容。 HTTP Compression

有兩個控制動態壓縮的設置。一個指定它何時被禁用:dynamicCompressionDisableCpuUsage,默認爲90%。另一個指定何時重新啓用dynamicCompressionEnableCpuUsage,默認爲50%。

你學的東西。

相關問題