在非生产环境中复制与负载相关的崩溃
我们正在Intranet上运行自定义应用程序,最近对其进行升级后发现了一个问题,即IIS挂起且CPU使用率为100%,需要重置。
在确定解决方案的同时,我们并没有使用户陷入困境,而是回滚到了以前的版本。第一步是重现问题,但我们不能。
这里是一些背景:
Prod具有一个带有两个CPU和2 GB RAM的单个虚拟化(vmware)Web服务器。数据库服务器有4GB,也有2个CPU。它也位于VMWare上,但是是单独的物理硬件。
在正常使用情况下,应用程序可以正常运行。 w3wp.exe进程通常使用5-20%的CPU和大约200MB的RAM。在正常使用情况下,CPU和RAM会略有波动,但没有异常。
但是,当我们开始遇到问题时,RAM急剧上升,CPU固定在98%(或者尽可能多)。该站点变得无响应,需要重新启动IIS。在这种情况下,重置应用程序池没有任何作用,需要完全重启IIS。
它不会在夜间发生(不使用)。当站点处于负载状态时,发生的次数更多,但在非高峰时段也发生了。
解决此问题的第一步是复制它。为了模拟负载,我们开始使用JMeter来模拟用法。我们的加载脚本基于崩溃前后的实际使用情况。使用JMeter,我们可以将使用率提高得很高(崩溃期间负载的2-3倍),但该站点的运行情况很好。 CPU占用率很高,站点的确变慢了,但是内存使用率是合理的,没有任何问题。
在非生产环境中,是否有人对如何重现这样的问题有任何提示?我们真的很想重现错误,确定解决方案,然后再次测试以确保我们已解决该问题。在此过程中,我们发现了许多需要改进的小问题,这些小问题可以解决问题,但如果能够重现问题并测试改进的版本,我真的会更有信心。
非常感谢任何工具,技术或者理论!
解决方案
回答
我们可以在此博客条目中找到有关解决此类问题的一些信息。她的博客通常是很好的调试资源。
回答
我有一篇有关调试生产中的ASP.NET的文章,该文章可能会提供一些指导。
回答
测试环境和现场直播真的一样吗?
IE
2台具有网络连接和帐户类型的物理服务器上的2个单独的vm实例?
数据库上还有其他实例吗?
IIS中是否还有其他Web应用程序?
.Net Config对吗?
App Pool Config是否适合服务帐户?
尝试查看有关II6优化性能的MS文章
很多技巧。