您可以使用 JMX 使用 keyjava.lang:type=OperatingSystem
和 attribute获得系统负载平均值SystemLoadAverage
。该值将是一个双精度浮点值(又名“双精度”)。
请注意,平均负载是采样期间运行队列的平均长度(上面的数字可能是瞬时的,也可能是 1 分钟的平均值)。根据您的系统,无论有多少请求正在等待服务,您的 JVM 进程可能只计为“1”。因此,您的平均负载可能一直为 1.0(这表明 CPU 利用率非常高),而 CPU 确实在为许多您无法检测到的请求提供服务。
如果您的大多数请求都是相同的“成本”,那么您可能希望将请求吞吐量视为衡量系统“负载”的更好衡量标准。您也可以通过 JMX 获得类似的指标,但您必须计算连接器的名称(或者只是使用连接jconsole
并浏览直到找到它)。
Tomcat 的每个连接器都有一个带有 key 的 JMX bean Catalina:type=GlobalRequestProcessor,name="[protocol]-[connectortype]-[localip-?]-[portnum]
。一个例子是Catalina:type=GlobalRequestProcessor,name="http-nio-127.0.0.1-8217
。这里有三个对您有用的属性:
maxTime
processingTime
requestCount
您可以对这些值进行采样并跟踪您自己的负载,也可以使用resetCounters
bean 上的操作来重置计数器并让 JMX bean 为您保留所有指标。