我们正在尝试从 VM 内部诊断显然运行缓慢的 VM。
情况:
数据库报告在等待异步网络 IO 上花费了大量时间,即。等待应用程序消费数据。应用程序 VM 显然也是轻载的:~20% CPU。基础设施不归我们所有,我们唯一的访问权限是通过 RDP 访问虚拟机,以及通过 SQL Management Studio 访问数据库集群。我们没有足够的权限来运行分析器,但我们确实记录了数据库和 VM 的性能计数器。
几周前,消息处理率突然下降了 70-80%。据我们所知,没有任何变化:应用程序没有被修改或重新配置,性能计数器没有指示负载特性的任何变化。基础设施的所有者表示,他们最终没有任何改变。
作为重新启动过程的一部分,应用程序必须重新加载其消息队列。这涉及对几十万行的简单选择,然后将这些行读入内存结构。数据库在几秒钟内为 SELECT 提供服务,但随后在读取结果集的应用程序上等待了大约 10 分钟。这是一个单线程操作,涉及非常简单的反序列化,在此硬件上花费的时间不应超过几分钟。
我目前的理论是网络延迟在某种程度上增加了,但 ping 只报告“<1ms”,而且我们在任何情况下都没有基线。hrPing 报告从应用程序服务器到数据库的时间在 0.5 到 2 毫秒之间。
另一种可能性是 VM 的实际 CPU 容量以某种方式减少了,但我预计这会表现为“明显”负载的增加。
我们还有其他调查途径吗?