tomcat - 识别 tomcat 上的系统负载

标签 tomcat scalability

我有一个运行我的网络应用程序的 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。这里有三个对您有用的属性:

  1. 最大时间
  2. 处理时间
  3. requestCount

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

关于tomcat - 识别 tomcat 上的系统负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938019/

相关文章:

tomcat - 如何在 Tomee 上设置 SSL

tomcat - Elasticsearch - Spring boot : None of the configured nodes are available

seo - 最佳实践是什么,使用子域、存档 SEO、保持系统可扩展性并隔离应用程序?

google-app-engine - 我想构建一个 Google 友好的网络应用程序,我应该从哪里开始?

java - 在 tomcat docker 上部署 java REST 服务

java - 如何在终端中杀死这个 tomcat 进程?

java - 部署在 Tomcat 上的 Jersey 应用程序返回 404

mysql - 将聊天消息存储在数据库中的最佳方法?

sql-server - 需要有关在SQL Server上使用SqlBulkCopy插入信封的建议

java - 使用可扩展的聊天室(playframework akka 和 websocket)