我们有一个使用ServiceStack(v3.9.60)的Web服务,该服务目前获得每分钟600个请求的平均值(每个New Relic监视)(使用两个Windows 2008 Web服务器进行负载平衡。)
在编码请求服务(包括请求过滤器)中花费的实际时间大约需要5毫秒(从我们从记录的log4net日志中看到的)。它将请求卸载到ActiveMQ端点并自动让ServiceStack生成204 (Return204NoContentForEmptyResponse启用“public void Post(request)”)
最重要的是我们:
PreRequestFilters.Insert(0, (httpReq, httpRes) =>
{
httpReq.UseBufferedStream = true;
});
因为我们使用原始主体来验证请求过滤器期间的盐渍哈希值(作为自定义标头传递),以获得批准,因为它来自正确的来源。
总体而言,我们在New Relic中看到整个Web服务调用平均需要大约700毫秒,这与执行编码过程实际需要的5毫秒相比要大得多。因此,当我们深入研究New Relic报告时,我们看到一些请求会定期花费相当长的时间(每个请求10-150秒。)在New Relic的报告中深入了解我们看到应用预请求过滤器需要花费时间(参见下面的图片。)我们想知道为什么会出现这种情况,如果它与Http Request对象上的缓冲流有关,以及可能做些什么来纠正这个?
修改
一直在玩这个,仍然没有找到答案。
完成的事情:
将虚拟文件夹从实际站点文件夹的子文件夹位置移出(此站点下有大约11个其他Web服务)
指定此Web服务使用自己的应用程序池,因此不会与主站点和站点下的其他Web服务共享
在Phil建议中添加了对Web.Config使用服务器GC的要求
禁用启用缓冲流使用的预请求过滤器(并绕过使用RawBody的代码)
为New Relic添加了更多仪器以便更好地下钻(见下图)
我开始怀疑这是否是由于加载导致的Windows Server / IIS限制。但是想听听那些比较熟悉的人。