识别tomcat上的系统负载

时间:2012-06-07 18:49:37

标签: tomcat scalability

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

您可以使用密钥java.lang:type=OperatingSystem和属性SystemLoadAverage使用JMX获取系统平均负载。该值将是双精度浮点值(也称为“double”)。

请注意,平均负载是采样周期内运行队列的平均长度(上面的数字可能是瞬时的,或者是1分钟的平均值)。根据您的系统,无论有多少请求等待服务,您的JVM进程可能只计为“1”。因此,您可能始终具有1.0的负载平均值(这表明完美的CPU利用率),而CPU实际上正在为许多您无法检测的请求提供服务。

如果您的大部分请求都是相同的“成本”,那么您可能需要考虑请求吞吐量,以更好地衡量系统的“负载”。你也可以通过JMX获得这样的指标,但是你必须计算你的连接器名称(或者只是使用jconsole连接并浏览直到你找到它。)

Tomcat的连接器每个都有一个带有密钥Catalina:type=GlobalRequestProcessor,name="[protocol]-[connectortype]-[localip-?]-[portnum]的JMX bean。一个例子是Catalina:type=GlobalRequestProcessor,name="http-nio-127.0.0.1-8217。您可以使用以下三个属性:

  1. maxTime
  2. processingTime
  3. requestCount
  4. 您可以对这些值进行采样并跟踪自己的负载,也可以对bean使用resetCounters操作来重置计数器,让JMX bean为您保留所有指标。