我正在对一个 Windows 服务器进行基准测试 - Web 应用程序,为了论证,它有一个名为 parseText() 的方法。
运行单个实例所需的时间不到 10 毫秒,但是当我将其增加到 10 个同时请求时,速度会急剧下降。每个请求说 1 秒。
CPU 没有固定,并且有足够的可用内存。所以我对瓶颈是什么感到困惑。
一种想法是内存延迟或总线带宽可能是一个问题,但我不确定哪个 perfmon 计数器最能表明这种情况。
有人可以建议一些柜台来检查这可能会对此事有所了解吗?
我正在对一个 Windows 服务器进行基准测试 - Web 应用程序,为了论证,它有一个名为 parseText() 的方法。
运行单个实例所需的时间不到 10 毫秒,但是当我将其增加到 10 个同时请求时,速度会急剧下降。每个请求说 1 秒。
CPU 没有固定,并且有足够的可用内存。所以我对瓶颈是什么感到困惑。
一种想法是内存延迟或总线带宽可能是一个问题,但我不确定哪个 perfmon 计数器最能表明这种情况。
有人可以建议一些柜台来检查这可能会对此事有所了解吗?
我的第一个猜测是磁盘 IO 或互斥锁。
对于磁盘,尝试添加物理磁盘、读取字节/秒和写入字节/秒以及读取/秒写入/秒(即读取和写入的总字节数和实际 io 操作计数)确保它们没有尖峰。如果您愿意,还可以添加队列长度。您正在寻找像 10Mb/sec 这样的大转变或大量的小型 IO。
对于互斥锁,这可能是内存分配的副作用(非常频繁的内存分配可能会导致这种情况),尝试添加“系统”和上下文切换/秒,也许还有系统调用/秒。这些从一般负载中反弹了一下,所以先感受一下,然后看看会发生什么。
如果您认为它是由内存带宽引起的(即耗尽 FSB),那么我认为 perfmon 无法测量,您需要切换到更像 vtune 的东西,这可能是您的选择,也可能不是。耗尽主内存带宽的一个例子是一个程序分配大量内存,然后将每个字节初始化为某个值,并执行此 LOTS。如果您认为这是您的问题,您可能需要使用代码分析器和其他此类工具隔离例程,但如果您在程序之外并且只是观察,这很难。