0

我有一个运行我的 Web 应用程序的 tomcat 服务器:http ://www.LoudReview.com 。这是一个有限的托管帐户,允许使用 128 MB 内存。一次又一次,与 tomcat 服务器的连接超时。

我想知道是否有一种方法可以监视 tomcat 服务器上的负载,以便在系统处于高负载时减少内存密集型操作。我可以构建一些智能,以便我可以监控系统正在使用的内存量,或者已经占用的连接数,并相应地处理请求吗?

如果可能的话,我更喜欢易于实现的解决方案,尽管我也可以使用更复杂的方法。

谢谢

4

1 回答 1

0

您可以使用 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。这里有三个对您有用的属性:

  1. maxTime
  2. processingTime
  3. requestCount

您可以对这些值进行采样并跟踪您自己的负载,也可以使用resetCountersbean 上的操作来重置计数器并让 JMX bean 为您保留所有指标。

于 2012-06-11T17:52:53.803 回答