我有一个运行web应用程序的tomcat服务器:http://www.LoudReview.com。这是一个有限的托管帐户,允许128 MB的内存。一次又一次,与tomcat服务器的连接超时。
我想知道是否有一种方法可以监视tomcat服务器上的负载,以便在系统高负载时减少内存密集型操作。我是否可以构建一些智能,以便监视系统正在使用的内存量,或者已经占用的连接数量,并相应地处理请求?
如果可能的话,我更喜欢易于实现的解决方案,尽管我也可以使用更复杂的方法。
谢谢
发布于 2012-06-12 01:52:54
您可以使用关键字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就是一个例子。这里有三个对您有用的属性:
maxTimeprocessingTimerequestCount您可以对这些值进行采样并跟踪您自己的负载,也可以在bean上使用resetCounters操作来重置计数器,让JMX bean为您保留所有指标。
https://stackoverflow.com/questions/10938019
复制相似问题