我们正在我们的 Intranet 上运行一个自定义应用程序,我们在最近升级它后发现一个问题,即 IIS 以 100% 的 CPU 使用率挂起,需要重置。
在确定解决方案时,我们回滚到以前的版本,而不是让用户陷入困境。第一步是重现问题——但我们不能。
这里有一些背景:
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 很高,站点确实变得缓慢,但内存使用量合理,没有任何问题。
有没有人有关于如何在非生产环境中重现此类问题的任何提示?我们真的很想重现错误,确定解决方案,然后再次测试以确保我们已经解决了它。在这个过程中,我们发现了一些我们已经改进的小东西可能会解决问题,但是如果我们能够重现问题并测试改进的版本,我真的会更有信心。
非常感谢任何工具、技术或理论!