.NET MVC 应用程序导致 CPU 和内存使用率高

5
我们发现一个.NET MVC应用程序的CPU和内存使用量非常高,但似乎无法找出原因。我们组没有访问Web服务器本身的权限,而是在某些限制被触发时自动接收通知(CPU或内存占用率达到90%以上)。在本地运行时,我们无法找到问题所在。我们认为以下几项可能是罪魁祸首:
  • 当用户执行某些操作时,该应用程序会有多个后台线程运行
  • 我们使用memcached(位于与Web服务器不同的机器上)
  • 我们正在使用Web套接字
其他方面,该应用程序作为Web应用程序相对标准, 包含一些表单、登录/注销功能,以及一些管理用户和数据的管理员能力; 没有什么超级花哨的东西。
我正在考虑两种不同的解决方案,想知道哪个更好。
  1. 在应用程序内创建一个页面(只提供给应用程序管理员),显示有关正在使用的内存和CPU的信息。是否有此类示例,或者是否可能实现?
  2. 使用某种第三方分析服务或应用程序,在Web服务器上安装它并允许我们深入查找导致应用程序CPU和内存使用量高的原因。

你的数据库是否运行在同一台物理/逻辑机器上? - JSK NS
不,数据库在另一台机器上。 - Jason
2
使用像DotTrace这样的分析工具。 - jrummell
2
或者 ANTS 性能分析器 ;-) - Uwe Keim
在我的情况下,遇到了这样的问题。部分视图在foreach循环中编写li元素,看起来它们没有使用stringbuilder。700个项目=浪费5秒时间。只在生产环境中发生。 - NickD
3个回答

2

你能解释一下为什么你推荐这个吗? - ChrisF
我们在生产中使用MiniProfiler来进行性能/代码路径分析,它帮助我们识别出哪些部分比较缓慢,同时还可以了解用户的实际使用情况。只需覆盖IStorage并存储最近的200个miniprofiles即可。然后创建一个简单的网页来显示它们。非常好用。 - Choco Smith

1

您可以将Preemptive的Runtime Intelligence与其连接起来。- http://www.preemptive.com/

否则,使用分析器或负载测试可能有助于找到问题。您是否有任何监控实际机器健康状况的工具?(处理器使用率、内存使用率、磁盘队列长度等)。

http://blogs.msdn.com/b/visualstudioalm/archive/2012/06/04/getting-started-with-load-testing-in-visual-studio-2012.aspx

Visual Studio内置分析器(取决于版本和版本)。您可以尝试WMI查询出现问题的Web服务器,或编写/提供诊断记录/监控工具并将其交给有权限的人。

您是否有任何输出缓存?使用哪个版本的IIS?您收到的90%处理器使用率警报是否显示您的Web进程实际上正在执行它?(如果警报配置不正确,则可能不是您的应用程序)


如果您无法远程查询WMI,您还可以创建一个调用WMI诊断并在其中显示它们的MVC页面。 - Maslow
如果您需要帮助翻译VB,请参考以下WMI查询示例:http://aspalliance.com/806_CodeSnip_Get_memory_size_usage_using_WMI_and_NET_20 - Maslow

-2

我曾经遇到过类似的情况,所以我基于this project创建了一个系统监视器给我的应用程序管理员。


1
仅提供链接的答案并不是好答案。最好在此处包含答案,并将任何链接用作备份。 - ChrisF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接