1、启动程序的JAVA_OPTS里加入如下运行参数。
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=xxx.xxx.com
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
注:添加Java程序的运行参数的方式是多种多样的。
如果要分析的程序是通过eclipse运行的,可以通过Run configurations -> Arguments -> VM Arguments来设置。
如果要分析的程序是承载在Web中间件例如Tomcat上运行的,可以修改catalina.sh来加入。
如果是直接用java命令启动的程序,可以直接把这些参数跟在命令的尾巴上。
2、从远端(或者本机)启动jconsole。
在安装好JDK的情况下,直接在控制台输入jconsole。
然后、输入刚才配置的IP/端口/账号/密码,链接到刚才启动的需要分析的程序。
3、虚拟机内存。
如果系统频繁出现内存溢出的异常,这个选项卡对我们分析问题很有帮助。
当遇到java.lang.OutOfMemoryError的时候我们需要先确认内存溢出在哪个区域。(通常是heap space)
我们可以分开监控堆内存的三个区域 Eden space/ Survavior space/ Old Gen,进一步缩小范围来定位问题。
3、线程监控。
在线程选项卡中,我们可以看到当前程序中活跃线程的情况。结合刚才的内存分析,找出内存飙升时活跃的线程。
这个选项卡还提供了一个非常有用的功能:检测死锁,可以分析出多线程中设计不合理的点。
4、MBean
如果你的程序中预先埋好了MBean,这个选项卡可以调用MBean中提供的方法。
这个非常有用:比如,方法的返回结果可以为你提供更详细的系统运行信息。比如循环中当前有多少行数据在排队等待处理等等等。
至于MBean的使用,戳这里:https://blog.csdn.net/u013256816/article/details/52800742/