【问题标题】:Obtaining JVM information from Tomcat Manager从 Tomcat Manager 获取 JVM 信息
【发布时间】:2016-03-18 17:27:30
【问题描述】:

在 Firefox 中使用 Firebug,我们从 Tomcat 管理器/服务器状态中看到以下 URL:

<a href="/manager/status?org.apache.catalina.filters.CSRF_NONCE=8EE95A7E3D6776DFEE4826EE3ED7ED9B">Server Status</a>

或者我们看到我们的旧服务器:

<a href="/manager/status">Server Status</a>

在结果页面上我们看到,例如:

JVM

可用内存:656.61 MB 总内存:1979.75 MB 最大内存:1979.75 MB

查看来自 Tomcat 的 bin 文件夹中的批处理文件,我们看到一些有趣的东西在命令行中运行良好。

"%JAVA_HOME%\bin\java" -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo

这很好用..

Server version: Apache Tomcat/6.0.20
Server built:   May 14 2009 01:13:50
Server number:  6.0.20.0
OS Name:        Windows 2003 OS
Version:     5.2
Architecture:   x86
JVM Version:    1.6.0_17-b04 JVM
Vendor:     Sun Microsystems Inc.

我想做的是定期从以下位置取样:

http://localhost/manager/status”在JVM下如果低于一定级别就警告我们。

我们确实看到了文件:/tomcat/webapps/manager/status.xsd

我们看到了:

<xs:complexType name="jvm">
    <xs:sequence>
        <xs:element name="memory" type="memory"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="memory">
    <xs:attribute name="free" type="xs:long" use="required"/>
    <xs:attribute name="total" type="xs:long" use="required"/>
    <xs:attribute name="max" type="xs:long" use="required"/>
</xs:complexType>

我们真正要查询的是:“免费”。

但是,我们有点卡住了。

"%JAVA_HOME%\bin\java" -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo.status

例如。这返回:

D:\>"%JAVA_HOME%\bin\java" -classpath "%CATALINA_HOME%\lib\catalina.jar
" org.apache.catalina.util.ServerInfo.status
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/catalina/u
til/ServerInfo/status
Caused by: java.lang.ClassNotFoundException: org.apache.catalina.util.ServerInfo
.status
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
Could not find the main class: org.apache.catalina.util.ServerInfo.status.  Prog
ram will exit.

了解,我们可以安装 YourKit 或其他类似工具,但我们没有在这些产品服务器上安装的灵活性。

【问题讨论】:

    标签: java apache tomcat jvm


    【解决方案1】:

    您应该使用 JMX,而不是尝试抓取状态页面。

    为了测试(不安全的访问),你可以通过在启动Tomcat时添加以下内容来启用JMX:

    -Dcom.sun.management.jmxremote.port=8000
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    

    如果从命令行启动 Tomcat,这些可以通过设置 CATALINA_OPTS 环境变量来给出。

    使用jconsole 检查Java 和Tomcat 提供的所有JMX 值。您正在寻找这个:

    java.lang
      Memory
        Attributes
          HeapMemoryUsage
    

    如果您设置具有manager-jmx 角色的用户,您也可以使用以下 URL 从 Tomcat 获取这些:

    http://localhost:8080/manager/jmxproxy?get=java.lang:type=Memory&att=HeapMemoryUsage
    

    在这两种情况下,您都会找到 4 个值,例如:

    committed   719323136
    init        536870912
    max        1908932608
    used        409566448
    

    【讨论】:

    • And.. 有了这个,“免费”应该是:free=max-used 如果我的计算不正确,请纠正我。
    【解决方案2】:

    看看:

    http://localhost:8080/manager/text/serverinfo

    如果我理解你的问题

    【讨论】:

    • 不完全......我确实在localhost/manager/serverinfo 看到了纯文本版本,但是,真正想要的是:localhost/manager/status 和 JVM 内存:“空闲内存”是我的目标。跨度>
    • 内存堆统计等VM信息可以通过/manager/text/vminfo获取。以防万一有人真的想使用文本界面而不是 JMX。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2021-06-08
    • 1970-01-01
    • 2014-05-12
    • 2021-01-06
    相关资源
    最近更新 更多