首页 > 技术文章 > JVM03_jconsole监控堆内存使用、jvisualvm(16)

njq666 2019-06-04 18:13 原文

jconsole监控堆内存使用情况,与jstat  -gcutil   pid  2000    5联合使用、命令对内存的干扰是最小的。

jconsole用RMI框架,RMI框架防止内存溢出会定时调用system.gc,所有尽量用命令查看,工具是出了问题才用,因为会对堆内存有影响但是都出问题了,就用吧。  

jvm参数、监控都配置在启动文件      tomcat启动文件是catalina.sh

C:\Program Files\Java\jdk1.8.0_151\bin\jconsole.exe

jvm 的参数,监控都在启动文件里。

/opt/apache-tomcat-8.5.41/bin   vi  catalina.sh  修改此配置文件JAVA_OPTS:配置监控文件,只能配置一个如果先多个监控,可以配置在一个里

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8011

                       -Djava.rmi.server.hostname=XXXXXip地址

                       -Dcom.sun.management.jmxremote.rmi.port=8011

                       -Dcom.sun.management.jmxremote.ssl=false

                       -Dcom.sun.management.jmxremote.authenticate=false"

JAVA_OPTS只有一个生效,如果多个需要注释掉留一个用到的,如果想监控两个就在后面追加

重启tomcat

sh startup.sh && tail -f ../logs/catalina.out

查看端口号

netstat  -anp|grep 1090

连接不上报错:

jvm使用了hostname -i的IP地址,我的/etc/hosts上127.0.0.1,所以远程老是连接不上。
只要在java启动参数中加入 -Djava.rmi.server.hostname=192.168.0.10 显示说明JVM返回给jconsole的IP地址即可。

 

 

 

jstat 命令与jconsole 结合看

点击—执行GC按钮,进行fgc一次

为什么不操作堆内存一直在增长?

机制原因,rmi框架本身内存就会增加,内部调用system.gc,用工具发送指令,也会调用。

 图形化工具对性能都是有影响的尽量用命令,命令查看出问题再用工具查看。

—————————————————————————————————————————————————————————————————————————————————

jvisualvm工具

监控堆内存使用情况——以及每个类、线程使用情况

C:\Program Files\Java\jdk1.8.0_151\bin\jvisualv

远程连接—ip—JMX连接ip+端口号

没有jconsole看着方便,不能看详细的堆情况,如果看需要下载插件

抽样器—抽样(内存)内存泄漏了开始抽样分析

抽样器—抽样(cpu)cpu高开始分析

抽样的过程中一直在压测,这个过程内存使用情况记录下来(类、字节、实例数)

内存有问题:内存一直在增加不能被释放,看增量看差异性,执行垃圾回收。

执行垃圾回收,对象占用一点都没有减少说明这个对象在执行fgc时没有被回收掉,这个对象引用都在说明这个对象引用除了问题,这个就可能是造成内存溢出的原因。

点击“停止”按钮 有快照。

 

推荐阅读