美文网首页
<JAVA生产环境性能监控与调优>笔记2

<JAVA生产环境性能监控与调优>笔记2

作者: 6cc89d7ec09f | 来源:发表于2018-11-04 18:17 被阅读3次

转载自:http://alanhou.org/java-optimization/#JVisualVM

JVisualVM

JVisualVM 集成了MAT的部分功能,可以让你不使用jvm的一些命令,轻松查看jvm的各项参数和指标

Mac命令行直接输入jvisualvm命令,Windows 找到java安装路径下bin目录下对应的 exe 文件双击即可打开
如何查看

插件安装Tools>Plugins>Settings根据自身版本(java -version)更新插件中心地址,各版本查询地址:

http://visualvm.github.io/pluginscenters.html

建议安装:Visual GC, BTrace Workbench


image.png

通过JVisualVM工具的抽样器-cpu就可以看到 某个方法执行时间大小,而不需要手动写代码

image.png

通过JVisualVM检测死锁

启动上一节模拟的死锁,访问 http://localhost:12345/deadlock地址

image.png
查看dump,(类似于命令 jstack),一样可以看到线程dump信息
image.png

通过JVisualVM工具 查看死循环

访问http://localhost:12345/loop mock死循环

image.png
在抽样器中直接看到了,有问题的方法,cpu占用非常高

通过JVisualVM工具 查看oom

访问 http://localhost:12345/heap mock堆内存溢出

image.png
dump后,用JVisualVM装入dump文件(文件-装入)可以看到具体的引用信息
image.png

类似于MAT,但是功能没有MAT强大

jmx是什么意思

所谓JMX,是Java Management Extensions的缩写,从官方的文档上来看,他就是一个框架,和JPA、JMS是一样的,和我们平时使用的Spring、Hibernate也没有什么区别。就是通过将监控和管理涉及到的各个方面的问题和解决办法放到一起,统一设计,以便向外提供服务,以供使用者调用

JVisualVM远程的监控

Applications 下的 Remote 处右击Add Remote Host…,输入主机 IP 即可添加,在 IP 上右击会发现有两种连接 JAVA 进程进行监控的方式:JMX, jstatd

远程连接tomcat(远程debug也是需要设置这样的参数),需要加上一些命令到bin/catalina.sh(以192.168.0.5为例),作为启动参数

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=192.168.0.5"

-Dcom.sun.management.jmxremote :开启jmx命令
-Dcom.sun.management.jmxremote.port:jmx服务的端口
-Dcom.sun.management.jmxremote.authenticate=false :连接jmx服务,不需要认证
-Dcom.sun.management.jmxremote.ssl=false :连接jmx服务,不需要加密
-Djava.net.preferIPv4Stack=true :连接jmx服务,优先使用ipv4
-Djava.rmi.server.hostname=192.168.0.5":设置连接jmx服务的ip

  • 重要的就是ip和端口

启动tomcat./startup.sh,以 JMX 为例,在 IP 上右击点击Add JMX Connection…,输入 IP:PORT

image.png

远程连接JAVA 进程也是类似的,tomcat本身就是java进程,区别是,jvm参数在tomcat中可以放在特定文件中,但是java程序,我们需要在启动的时候就加上

nohup java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=192.168.0.5 -jar monitor_tuning-0.0.1-SNAPSHOT.jar &

相关文章

网友评论

      本文标题:<JAVA生产环境性能监控与调优>笔记2

      本文链接:https://www.haomeiwen.com/subject/nearxqtx.html