我们在 HAProxy 后面的 3 台服务器上运行 Asp.Net WebApi。HAProxy 只是在这 3 个实例之间随机分配请求。
这些实例连接到 mongodb、redis 和一些 windows 服务。
通常,w3wp.exe 在每个 api 服务器上使用大约 %30 cpu。
有时(一小时内几次)其中一个 api 服务器决定使用大量 cpu。与此行为相关的是,我们开始看到响应时间增加。这个数字一直在增加,直到 HAProxy 看到 10000 毫秒的响应时间并决定将请求路由到其他两个服务器。所有这些都发生在 10-20 秒内。一段时间后,该服务器恢复正常状态并再次开始接收请求。几分钟后,另一台服务器执行完全相同的操作。这种情况一直在继续。
我们正在使用 New Relic,但由于该应用程序是 WebApi 应用程序,因此我们没有得到任何有用的信息。我们监控所有服务器(redis、mongo 和 windows 服务)的 CPU 使用情况、内存使用情况、网络流量和 I/O,但在上述中断期间我们没有看到任何显着负载。
我们如何检测此应用程序行为背后的原因?