我有一个运行我的网络应用程序的 tomcat 服务器:http://www.LoudReview.com . 这是一个有限的托管帐户,允许使用 128 MB 的内存。 一次又一次,与 tomcat 服务器的连接超时。
我想知道有没有什么办法可以监控tomcat服务器的负载,以减少系统高负载时的内存密集型操作。我能否构建一些智能,以便监控系统正在使用的内存量或已占用的连接数,并相应地处理请求?
如果可能的话,我更喜欢易于实现的解决方案,尽管我也可以使用更复杂的方法。
谢谢
最佳答案
您可以使用键 java.lang:type=OperatingSystem
和属性 SystemLoadAverage
使用 JMX 获取系统平均负载。该值将是一个 double 浮点值(又名“double”)。
请注意,平均负载是样本期间运行队列的平均长度(上面的数字可能是瞬时的,也可能是 1 分钟的平均值)。根据您的系统,无论有多少请求等待服务,您的 JVM 进程可能只计为“1”。因此,您的平均负载可能始终为 1.0(这表明 CPU 利用率很高),而 CPU 确实在为许多您无法检测到的请求提供服务。
如果您的大部分请求都具有相同的“成本”,那么您可能希望将请求吞吐量视为衡量系统“负载”的更好指标。您也可以通过 JMX 获得类似的指标,但您必须计算连接器的名称(或者使用 jconsole
连接并浏览直到找到它)。
Tomcat 的每个连接器都有一个 JMX bean,其键为 Catalina:type=GlobalRequestProcessor,name="[protocol]-[connectortype]-[localip-?]-[portnum]
。一个例子是Catalina:type=GlobalRequestProcessor,name="http-nio-127.0.0.1-8217
。这里有三个对您有用的属性:
最大时间
处理时间
requestCount
您可以对这些值进行采样并跟踪您自己的负载,或者您可以对 bean 使用 resetCounters
操作来重置计数器并让 JMX bean 为您保留所有指标。
关于tomcat - 识别 tomcat 上的系统负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938019/