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时没有被回收掉,这个对象引用都在说明这个对象引用除了问题,这个就可能是造成内存溢出的原因。
点击“停止”按钮 有快照。