我在Windows Server 2012上运行IIS8的网站。我试图确定是什么原因导致IIS的CPU使用率过高(IIS的CPU使用率通常高达50%或更多)。服务器全天接收每秒约40个请求,但可能只需要每秒1-2个需要处理的URL。IIS8 RewriteModule/URLRewrite极其缓慢
我启用了请求跟踪,发现一些RewriteModule请求超过100秒(!)完成。我无法确定如何在具有足够硬件的机器上实现这一点。完全相同的URL结构在不到一秒的时间内通过Apache上的mod_rewrite进行处理。
一个例子URL会是这样的:
http://<domain-name>/Product/<Parent-Category>/<Child-Category1>/<Child-Category2>/<Child-Category3>/<Product-Name>
所附重写规则是:
<rule name="Rule" stopProcessing="true">
<match url="^Product/([^/\?]+)/?([^/\?]+)?/?([^/\?]+)?/?([^/\?]+)?/?([^/\?]+)?/?([^/\?]+)?/?[\?]?(.+)?$"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="/Product/index.php?a={R:1}&b={R:2}&c={R:3}&d={R:4}&e={R:5}&f={R:6}&{R:7}" appendQueryString="true"/>
</rule>
有什么在我定义匹配URL的方式,是造成高处理时间?如果某些匹配的网址使用了许多父/子类别(最多5个,通常为3-4个),则其中包含大量字符。
我贴我的变化,我上周五晚做,但我接受你的答案,因为它表明了同样的根本性的变化。 –