Replicating load related crashes in non-production environments我们正在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的文章,该文章可能会提供一些指针。 您可以在此博客条目中找到有关解决此类问题的一些信息。她的博客通常是很好的调试资源。 您的测试环境和现场直播真的一样吗? 数据库上还有其他实例吗? IIS中是否还有其他Web应用程序? .Net配置是否正确? 应用程序池配置是否适合服务帐户? 很多技巧。 |