jdk(或openjdk-dev)中有一些工具,可以监控JVM状态。

VisualVM:
   sun jdk自带工具。$JAVA_HOME\bin\jvisualvm.exe

jconsole:
   sun jdk自带工具。$JAVA_HOME\bin\jconsole.exe

java mission control:
   sun jdk自带工具。$JAVA_HOME\bin\jmc.exe

jps:查看jvm进程。

jhat:读取dump文件,生成html并开启http服务。html中还可以使用Object Query Language (OQL)进行查询。

jinfo:显示VM信息。

jmap:查看内存中对象的情况。常用参数  -heap  -histo  -dump

jstat:查看内存使用情况。

jstack:打印堆栈信息。可以看到JVM中线程的执行堆栈。加-l还可以看到锁的信息。

jProfiler:商业软件,监控项很全面,能够看到线程栈中各方法调用所花时间的百分比,还能看到jdbc调用所发的sql语句。
              对远程jvm监控时需要安装代理。

如果需要监控远程server的JVM,需要打开server的jmx。(和防火墙)
为tomcat配置jmx,在startup脚本中设置:
  1. JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=1099 \
  2. -Dcom.sun.management.jmxremote.ssl=false \
  3. -Dcom.sun.management.jmxremote.authenticate=false \
  4. -Djava.rmi.server.hostname=192.168.0.1"
(不建议写在catalina脚本中,因为shutdown脚本也会调用catalina。)

另外,jmx端口可以在tomcat的server.xml中配置,这样就不需要-Dcom.sun.management.jmxremote.port参数了。
需要在lib下放置catalina-jmx-remote.jar

className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="1111"
rmiServerPortPlatform="1112"

另,java metrics(是一个用于度量的一个JAVA的类库)待学习。
09-18 13:14
查看更多