启动 jvisualvm
{java}/bin/jvisualvm.exe
监控远程tomcat
修改 {tomcat}/bin/catalina.sh ,新增如下内容:防火墙也要放开配置的端口
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=192.168.1.152 -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
创建jre jmx 认证文件
cp {java}/jre/lib/management/jmxremote.password.template jmxremote.password
赋权限
chmod +w jmxremote.password
配置用户,密码可根据修改
vi jmxremote.password
放开
monitorRole QED
controlRole R&D
重启tomcat
jvisualvm 创建远程连接
内存调优
堆不够,调整tomcat 的 jvm 参数 -Xms512m -Xmx512m
备注: 选个合理的值,设置成相等,减少gc带来的性能开销
Xms :
初始堆大小
Xmx :
最大堆大小
PermGen 不够,调整tomcat 的 jvm参数 -XX:PermSize=64M -XX:MaxPermSize=128M
备注:设置合适的值,避免tomcat报 PermGen 内存溢出,导致频繁gc 造成cpu 假死。900%
XX:PermSize: 持久代大小
XX:MaxPermSize:最大持久代大小
最方便的方法,使用 jconsole.exe 监控一段时间,根据情况 设置。
测试环境打印gc日志,
tomcat jvm 参数增加: -XX:+PrintGC -XX:+PrintGCDateStamps -Xloggc:../logs/gc.log
优化原则:
1)GC 频率尽可能的少,一直GC的时间尽可能的短。(GC时,整个程序会卡住不可用)
2)微调参数,观察GC日志。