ASP.Net IIS工作进程(w3wp.exe*32),在生产环境中使用100个CPU资源

ASP.Net IIS工作进程(w3wp.exe*32),在生产环境中使用100个CPU资源,asp.net,performance,cpu-usage,production-environment,w3wp,Asp.net,Performance,Cpu Usage,Production Environment,W3wp,我们最近将web应用程序的新版本部署到生产环境中,对加载各种抵押贷款产品的相对较高流量页面进行了一些重大更改。自部署以来,此产品页面的加载时间从7秒增加到10秒,从50秒增加到2分钟。此外,由于我们的IIS工作进程(w3wp.exe 32)在专用生产web服务器上运行,CPU利用率现在经常达到最大值。这种不可接受的严重性能损失只发生在产品页面上,而不发生在任何其他页面上 在CPU使用量达到最大值的持续时间内,我在服务器上运行了DebugDiag.exe。罪魁祸首还是我们的产品页面。在正常工作时间

我们最近将web应用程序的新版本部署到生产环境中,对加载各种抵押贷款产品的相对较高流量页面进行了一些重大更改。自部署以来,此产品页面的加载时间从7秒增加到10秒,从50秒增加到2分钟。此外,由于我们的IIS工作进程(w3wp.exe 32)在专用生产web服务器上运行,CPU利用率现在经常达到最大值。这种不可接受的严重性能损失只发生在产品页面上,而不发生在任何其他页面上

在CPU使用量达到最大值的持续时间内,我在服务器上运行了DebugDiag.exe。罪魁祸首还是我们的产品页面。在正常工作时间和高峰时间,我们平均有60个用户,最大的CPU会显著降低其余web应用程序页面的负载。我们偶尔会得到http错误代码501,这表明服务器过载和请求失败

我运行了一个Chrome开发工具>网络>捕获,看到(例如)一个请求只获取产品页面本身(248k)需要24秒,然后几个后续请求几个20kb的图像和JavaScript文件需要更长的时间(每个24到50秒),总页面加载时间为1.9分钟(850k已传输,93个请求总数,DOMContentLoaded=1.2分钟。)

我不认为性能下降如此之大是由于这个新版本中固有的asp.net或SQL代码的低效更改造成的(不必担心我会试图掩盖自己;反正这不是我的代码;-)。根据这一理论,我注意到在浏览器中加载大部分产品页面内容后,Chrome会发出另一个get请求(productpage.aspx?ImageControl_ctl00$ctl00$cphMainBodyFrame$ImageCompanyLogo=1),该请求用于母版页asp.net ImageControl中的12k公司徽标。此请求平均需要额外40秒才能完成。所以这个标志要到游戏后期才会出现

我在产品页面上运行了Telerik的JustTrace asp.net评测工具my local DEV environment,尽管对数据库和数据访问层进行了大量调用,但在性能瓶颈方面没有发现任何明显的问题。然后,我在JustTrace中分析时将上面的徽标url粘贴到地址中,并查看检索该徽标所做的最小处理。Asp.net在内部仅向成员数据库调用两个存储过程来验证用户身份,同时还调用了其他一些次要的系统调用。尽管有最小的asp.net和存储过程。打电话时,要求标识的时间太长;并且仅适用于产品页面

这可能是会话锁问题吗?而且,这些年来,我已经阅读了数千篇SO帖子,这是我的第一篇帖子。非常感谢社区多年来的支持。这是一个宝贵的资源

Win Server 2008 R2(v6.1构建7601:SP1)-[8个CPU核的虚拟机>32GB RAM] IIS(7.5.7600.16385) ASP.NET 4.0 WebForms
MSSQL服务器12

简短回答:

我们使用的是Infragistics asp.net控件版本12.2.20122.2031,可在传统浏览器中使用。升级到12.2.20122.2257版(还支持传统浏览器),不仅完全解决了我们产品页面的问题,而且对整个站点的性能产生了显著的影响

长答案:

在web服务器CPU达到最大值的持续时间内,我能够获得正在运行的进程的快照。我使用了一个工具(DebugDiag)来分析快照,它生成了一个冗长的详细信息报告,其中的Infragistics GetLicense()函数需要最多的CPU资源。它看起来像这样:

我就此联系了Infragistics支持部门,他们指导我们使用12.x.2257版本的控件,他们说这将解决性能问题。我们在开发环境中升级了Infragistics dll,整个站点从平均每页加载6-15秒增加到2-3秒。更新面板异步回发也大大加快了完成速度

我们担心由于升级我们在整个应用程序中一致使用的控制集而可能出现的问题而导致的任何风险。测试升级发现,如果我们的C#代码在代码隐藏中动态创建了控件,那么在Infragistics日历控件中手动键入日期时,IE DocMode=IE7会出现一些小问题

为什么我们使用DocMode IE7


我们的web应用程序是在IE7的辉煌时期构建的。该公司发展迅速,许多代码不得不由许多开发人员编写,他们从那时起就来了又走了。从来没有决定脱离对IE7的依赖,因此应用程序的大部分在IE DocMode=IE7下运行。这意味着只有旧式Infrastics asp.net控件(版本)当您的服务器充分利用CPU处理productpage.aspx页面时,显然对同一服务器的任何其他请求也将受到影响。因此,我将回到第一步,进一步分析最明显的疑点:在站点相对快速和不可操作的缓慢之间发生变化的唯一一件事:products页面。其他开发人员已经在修改产品页面。但是,应用程序中的其他页面在产品页面的同时发出请求,除非cpu在延长的时间内达到最大值,否则执行速度很快。同样令人困惑的是(在OP中)仅仅请求徽标(仅产品页面)ex。(…productpage.aspx?ImageControl_ctl00$ctl00$cphMainBodyFrame$ImageCompanyLogo=1)通过粘贴到地址栏中的链接上方,平均需要45秒。在该请求期间,只有内部asp.net调用才会触发,包括,我想,asp.net会话锁