监控工具-jvisualvm.exe-入门,监控tomcat7的jmx、jstatd
1、添加JMX
1.1、catalina-jmx-remote.jar 放在 Tomcat 的 lib 目录下
catalina-jmx-remote.jar 的确切位置可能因 Tomcat 版本和发行版而异,但通常它应该被放置在 Tomcat 的 lib 目录下

1.2、catalina.sh设置 JVM 参数
对于 Linux/Unix,编辑 catalina.sh 文件,找到 JAVA_OPTS 或 CATALINA_OPTS 变量并添加如下参数:
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=your_server_ip"

JAVA_OPTS='-Xms600m -Xmx600m -XX:PermSize=128m -XX:MaxPermSize=256m
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10001
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.159.132'

参数解释如下:
com.sun.management.jmxremote:启用 JMX 远程监控。com.sun.management.jmxremote.port:指定 JMX 代理监听的端口号(这里使用 9010,你可以选择一个不同的端口)。com.sun.management.jmxremote.ssl:设置为false以禁用 SSL(如果你想使用 SSL,需要设置为true并配置 SSL)。com.sun.management.jmxremote.authenticate:设置为false以禁用身份验证(在生产环境中,你可能希望启用身份验证)。java.rmi.server.hostname:指定 JMX 代理监听的 IP 地址(通常设置为你的服务器 IP 地址)
1.3、打开jvisualvm.exe
jdk1.8版本,在bin目录下直接有,更高版本需要自行下载,路径:VisualVM: Download

1.3.1、远程-添加远程主机

1.3.2、添加JMX连接

1.3.3、连接成功

2、添加jstatd
2.1、查看jdk位置
2.1.1、方法一,进到tomcat根目录bin文件夹下,./startup.sh,启动tomcat,看看其使用的jdk的位置

2.1.2、方法二,进到tomcat根目录bin文件夹下,./version.sh。

2.2、修改java.policy配置
对于 Windows 系统:
- JDK 安装目录:
C:\Program Files\Java\jdk<version>\conf\java.policy - JRE 安装目录:
C:\Program Files\Java\jre<version>\lib\security\java.policy
对于 Linux 和 macOS 系统:
- JDK 安装目录:
/usr/lib/jvm/java-<version>/conf/java.policy - JRE 安装目录:
/usr/lib/jvm/java-<version>/jre/lib/security/java.policy
打开java.policy,添加如下配置信息
grant {
// 允许所有RMI相关的权限
permission java.rmi.RemotePermission "*";
// 允许访问所有类和方法
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "stopThread";
// 允许网络访问
permission java.net.SocketPermission "*", "accept,connect,listen,resolve";
// 允许JVMTI相关的权限(如果需要)
permission java.lang.management.ManagementPermission "control";
permission java.lang.RuntimePermission "accessJVMTI";
// 允许访问系统属性
permission java.util.PropertyPermission "*", "read,write";
// 允许加载本地库(如果需要再用,不太安全)
permission java.security.AllPermission;
};
2.3、启动jstatd
进入目录
cd /usr/local/jdk1.7.0_80/bin
./jstatd -J-Djava.security.policy=jstatd.all.policy -p 10003 -J-Djava.rmi.server.hostname=192.168.159.132 -J-Djava.rmi.server.logCalls=true
这个命令是用于启动 jstatd(Java Virtual Machine statistics monitoring daemon)的,它是Java的一个工具,用于远程监控JVM的性能统计信息。下面是该命令的详细解释:
-
./jstatd: 运行当前目录下的jstatd工具。 -
-J-Djava.security.policy=jstatd.all.policy: 这部分指定了Java的安全策略文件为jstatd.all.policy。安全策略文件定义了哪些代码可以执行哪些操作。这里的文件名jstatd.all.policy可能意味着这个策略文件允许所有操作,但这需要查看文件内容来确定。 -
-p 10003: 这部分指定了jstatd服务监听的端口号为10003。其他工具(如jstat、jconsole等)可以通过这个端口远程连接到jstatd服务。 -
-J-Djava.rmi.server.hostname=192.168.159.132: 这部分指定了RMI(Remote Method Invocation)服务器应该使用的主机名或IP地址为192.168.159.132。RMI是Java的一种远程过程调用机制,jstatd使用RMI来提供远程接口。 -
-J-Djava.rmi.server.logCalls=true: 这部分启用了RMI服务器上的方法调用日志记录。当这个选项被设置为true时,RMI服务器会记录每个远程方法调用的详细信息,这对于调试和性能分析非常有帮助。
总的来说,这个命令启动了一个 jstatd 服务,该服务使用 jstatd.all.policy 作为安全策略文件,监听在端口 10003,绑定到IP地址 192.168.159.132,并且启用了方法调用日志记录。其他工具可以通过这个端口和IP地址连接到这个 jstatd 服务,以获取JVM的统计信息。

2.4、添加jstatd连接

2.5、添加Visual GC插件


3、调优
3.1、GC调优
如果满足下面的指标,则一般不需要进行GC调优:
Minor GC执行时间不到50ms;
Minor GC执行不频繁,约10秒一次;
Full GC执行时间不到1s;
Full GC执行频率不算频繁,不低于10分钟1次。

GC的调优方向有以下几点:
减少创建对象的数量 。对象创建及回收都会占用系统资源,减少对象创建的数量可以降低GC的压力。
减少使用全局变量和大对象 。全局变量和大对象会长期占用内存,导致老年代内存占用增长过快,触发Full GC的概率增大。
根据实际应用场景确定调优目标 。例如,GC停顿时间不能大于200ms,同时吞吐量不能低于每秒1万次请求。
分析JVM中GC的状态,定位问题原因 。可以通过jstat等JVM监控工具、GC日志、操作系统诊断工具等获取JVM相关信息。
根据实际情况调整相关JVM参数或其它软硬件配置 。例如,调整堆内存大小、调整线程数等。
3.2、线程死锁调优
JMX可监测到死锁,点击线程Dump,可查到具体报错行数


cd /usr/local/web/WebRoot/WEB-INF/classes/这个目录里的config.properties 最后一行JTEST=1,可以模拟有死锁BUG的情况,会被visualvm监测到 改成JTEST=0,可以模拟BUG已修复的情况,不会出现死锁


浙公网安备 33010602011771号