在非生产环境中复制与负载相关的崩溃

时间:2008-08-13 06:04:53

标签: asp.net performance memory crash cpu

我们正在内联网上运行自定义应用程序,我们发现最近升级后出现问题,其中IIS挂起时CPU占用率为100%,需要重置。

我们在确定解决方案时,已经回滚到之前的版本,而不是让用户接受挂起。第一步是重现问题 - 但我们做不到。

以下是一些背景知识:

Prod有一个虚拟化(vmware)Web服务器,有两个CPU和2 GB RAM。数据库服务器也有4GB和2个CPU。它也在VMWare上,但是是单独的物理硬件。

在正常使用期间,应用程序运行良好。 w3wp.exe进程通常使用5-20%CPU和大约200MB RAM。在正常使用情况下,CPU和RAM略有波动,但没什么不寻常的。

但是,当我们开始遇到问题时,RAM会急剧上升,并且CPU会达到98%(或者可以达到的最大值)。该站点无响应,需要重新启动IIS。在这种情况下,重置应用程序池不会执行任何操作,需要重新启动IIS。

夜间没有发生(没有使用)。当网站负载不足时会发生更多情况,但也会在非高峰时段发生。

解决这个问题的第一步是复制它。为了模拟负载,我们开始使用JMeter来模拟使用情况。我们的加载脚本基于崩溃时的实际使用情况。使用JMeter,我们可以将使用率提高到相当高的水平(崩溃期间负载的2-3倍),但网站表现良好。 CPU处于高位,网站确实变得迟缓,但内存使用情况合理且没有任何问题。

有没有人知道如何在非生产环境中重现这样的问题?我们真的想重现错误,确定解决方案,然后再次测试以确保我们已经解决了。在此过程中,我们发现了许多可以解决问题的小事,但如果我们能够重现问题并测试改进的版本,我真的会感到更自信。

非常感谢任何工具,技术或理论!

3 个答案:

答案 0 :(得分:1)

您可以在this blog entry找到有关解决此类问题的一些信息。她的博客通常是一个很好的调试资源。

答案 1 :(得分:1)

我有an article about debugging ASP.NET in production可能会提供一些指示。

答案 2 :(得分:0)

您的测试是否与实时相同? 即 2个物理服务器上有2个独立的虚拟机实例 - 具有网络连接和帐户类型?

数据库上还有其他实例吗?

IIS中是否还有其他Web应用程序?

.Net Config是对的吗?

App Pool Config是否适合服务帐户? Try look at this - MS Article on II6 Optmising for Performance

很多技巧。