Java 从Tomcat管理器获取JVM信息
通过Firefox使用Firebug,我们可以从Tomcat管理器/服务器状态中看到以下URL:Java 从Tomcat管理器获取JVM信息,java,apache,tomcat,jvm,Java,Apache,Tomcat,Jvm,通过Firefox使用Firebug,我们可以从Tomcat管理器/服务器状态中看到以下URL: <a href="/manager/status?org.apache.catalina.filters.CSRF_NONCE=8EE95A7E3D6776DFEE4826EE3ED7ED9B">Server Status</a> 这很有效 Server version: Apache Tomcat/6.0.20 Server built: May 14 2009 01
<a href="/manager/status?org.apache.catalina.filters.CSRF_NONCE=8EE95A7E3D6776DFEE4826EE3ED7ED9B">Server Status</a>
这很有效
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.
我想做的是从以下地点定期取样:
“”在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>
举个例子。这将返回:
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或其他类似工具,但我们没有在这些prod服务器上安装的灵活性。请看:
如果我理解了您的问题,而不是试图刮状态页面,那么您应该使用JMX 对于测试(不安全访问),您可以通过在启动Tomcat时添加以下内容来启用JMX:
-Dcom.sun.management.jmxremote.port=8000
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
如果从命令行启动Tomcat,可以通过设置CATALINA\u OPTS
环境变量来实现
使用jconsole
检查Java和Tomcat提供的所有JMX值。您正在寻找这个:
java.lang
记忆
属性
HeapMemoryUsage
如果您使用manager jmx
角色设置用户,也可以使用以下URL从Tomcat获取这些内容:
http://localhost:8080/manager/jmxproxy?get=java.lang:type=Memory&att=HeapMemoryUsage
在这两种情况下,您将发现4个值,例如:
719323136
初始化536870912
最大值1908932608
使用409566448
不太清楚。。我确实看到了纯文本版本,但真正想要的是:和JVM内存:“空闲内存”是我的目标。虚拟机信息,如内存堆统计数据,可以通过/manager/text/vminfo
获得。以防万一有人真的想使用文本接口而不是JMX。。这样,“Free”应该是:Free=max used如果我的计算不正确,请纠正我。
<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.