JVM性能监测

1683945300050

JVM关键参数剖析

1683945379046

什么叫守护线程?

守护进程是来保护非守护线程

非守护进程是来干活的,守护进程是监工, 为了避免非守护进程被GC误回收

守护进程大多数是程序自动生成,当然也可能由程序员写,一般很少这种情况

内存回收机制 如果不是守护进程,可能被内存回收机制处理掉.要安排一个守护进程,线程来检查时,拦住线程回收

1683945611133

堆,用户可以控制,栈用户没发控制

回收的都是堆内存,   堆只是存储对象数据等,   而栈是核心,不会被用户改变

堆的内存大小可以调节,栈的内存大小不可以调节

1683945690502

新生代和老年代都会被分配内存

1683945934673

JVM是监控内存回收的,不是监控内存的

1683946006949

JVisual可以监控GC回收机制

什么是GC?

1683946077854

1683946309949

回收不是一次性回收,而是分代回收

老年代  Tenured     去老年代,就不总是被GC监测

新生代 eden +S0+S1      生成区(S0+S1)

老年代的内存回收频率是远远低于新生代的,新生代频繁被回收

Visual GC分为三部分:Spaces、graphs、histogram

Spaces区域:代表虚拟机内存分布情况。从图中可以看出,虚拟机被分为Metaspace、 Old、Eden、S0、S1
1)Metaspace:元空间内存,可叫做方法区或者非堆

2)Old:老年代内存

3)年轻代中Eden(伊甸园)区、和两个Survivor区(S0、S1)内存

Graphs区域:内存使用详细介绍
Compile Time:编译时间,5929 compiles表示编译总数,7.707s表示编译累计时间。一个脉冲表示一次JIT编译,窄脉冲表示持续时间短,宽脉冲表示持续时间长。

Class Loader Time:类加载时间,6305 loaded表示加载类数量,0 unloaded表示卸载的类数量,44.562ms表示类加载花费的时间

GC Time:垃圾回收时间,17 collections表示垃圾收集的总次数,238.447ms表示垃圾收集花费的时间,Last Cause表示最近垃圾收集的原因

Eden Space:Eden区,括号内的84.000M表示最大容量,43.000M表示当前容量,括号后面的13.907M表示当前使用情况,14 collections表示垃圾收集次数,44.562ms表示垃圾收集花费时间

Survivor 0:S0区,括号内的28.000M表示最大容量,18.500M表示当前容量,括号后面的8.877M表示当前使用情况

Survivor 1:S1区,括号内的28.000M表示最大容量,20.000M表示当前容量,括号后面的0表示当前使用情况

Old Gen:老年代,括号内的171.000M表示最大容量,72.000M表示当前容量,括号后面的32.274M表示当前使用情况,3 collections表示垃圾收集次数,193.885ms表示垃圾收集花费时间

Metaspace:元空间,括号内的1.029G表示最大容量,40.539M表示当前容量,括号后面的37.877M表示当前使用情况

Histogram区域:survivor区域参数跟年龄柱状图3.1)Tenuring Threshold:表示新生代年龄大于当前值则进入老年代

1683946968886

1683947130496

newratio=9表示新生代和老年代比例是1:9

1683947280874

年老代的GC回收较慢

1683947405635

1683947462774

小结:

当进程空闲时,会被GC回收机制回收

如果这个进程没有守护进程,会直接被回收掉,如果eden区域满了,会触发MInor GC机制,会将对象全部移动到S1和S0去

如果这个进程由守护进程,会被保护起来,继续干活.当GC

回收机制再去检测这个进程看其是否空闲,如果还是干活,反复几次,当对象经历的GC次数大于某个值后,会被认为是一个有较长生命周期的对象.从而移动到老年代.

JVM性能指标监控

下载地址:

1683947985381

配置:

E:\性能\模块2:电商项目性能测试实战\第6次课(JVMGC监控技术+JVMGC项目实战)\预习\visualvm_205\etc

visualvm.conf 在第72行左右填上jdk的地址

visualvm_jdkhome="C:\Program Files\Java\jdk-11"

jdk1.8之前的版本自带,不需要下载

1683948117858

1683948533868

监控GC回收:

visualvm可以监控到所有的java程序,无论是本地还是远程的

jmx方式连接服务器,这种方式连接时,没有GC

复制catalina-jmx-remote.jar,到都市商城服务器的/usr/local/tomcat7-8083/lib

vi catalina.sh.加入以下代码
	-Djava.rmi.server.hostname=192.168.80.160
        -Dcom.sun.management.jmxremote.port=10001
        -Dcom.sun.management.jmxremote.ssl=false
        -Dcom.sun.management.jmxremote.authenticate=false
第一句表示填写你的ip地址
第二句表示jmx方式的端口号
第三句表示不适用ssl连接
第四句表示不进行用户验证


之后重启tomcat,就可以连上了

如果不能连接,大多数情况是防火墙拒访问,此时可以关闭防火墙,或者将10001端口添加到白名单
关闭防火墙:
systemctl stop firewall
service firewalld status
添加10001到防火墙的白名单:
firewall -cmd --add-port =10001/tcp --permanent


1683966231561

可用内存

jstatd的连接方式

复制java.policy文件到/usr/local/jdk1.7.0_80/jre/lib/security
找到java.policy,添加或者替换这个文件

vi j-start-jstatd.sh

./jstatd -J-Djava.security.policy=jstatd.all.policy -p 10003   -J-Djava.rmi.server.hostname=192.168.150.137  -J-Djava.rmi.server.logCalls=true


hostname填写自己的虚拟机ip

之后./j-start-jstatd.sh

如果以上配置完成之后,visualvm无法连接jstatd,那么需要修改hosts文件

vi /etc/hosts,将第一行的127.0.0.1替换成虚拟机ip

一般性能正常服务器,GC回收新生代次数10几分钟一次,老年代1天一次左右 元空间(perm或者metadata)放一些函数和静态数据

还可以发现线程死锁的位置

模拟线程死锁

什么是线程死锁

线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。

/usr/local/web/WebRoot/WEB-INF/classes
vi config.properties
重启tomcat

1683966717736

一、java jvisualvm介绍

1、jvisualvm用途

VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的).
监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析...
内存信息
线程信息
Dump堆(本地进程)
Dump线程(本地进程)
打开堆Dump。堆Dump可以用jmap来生成。
打开线程Dump
生成应用快照(包含内存信息、线程信息等等)
性能分析。 :idea: CPU分析(各个方法调用时间,检查哪些方法耗时多),内存分析(各类对象占用的内存,检查哪些类占用内存多)

2、jvisualvm安装

jvisualvm已经被集成在jdk1.6以上的版本中,正常安装完jdk后,至jdk的bin目录下,运行jvisualvm.exe即可

二、Visual GC插件下载与安装

第一种方式:

1683960195584

第二种方式:

1、Visual GC插件下载

1)访问visualvm插件中心

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

2)选择对应的JDK版本和插件进行下载

例:本次使用的JDK版本是1.8.0_101,下载的插件是Visual GC
步骤1:进入对应的JDK版本插件地址

步骤2:在对应的JDK版本链接下找到对应的插件Visual GC

下载的文件如下:

2、Visual GC插件安装

1)启动VisualVM

启动路径 D:\Program Files\Java\jdk1.8.0_101\bin\jvisualvm.exe

2)安装Visual GC

VisualVM界面,工具》插件》已下载》添加插件,选择已下载的插件,然后点击安装,直到安装完成。

3)重启VisualVM

重启后在监控页面中就可以看到Visual GC界面

三、远程监控中间件tomcat

1、本机安装JDK

2、服务器tomcat修改参数重启

监控服务器上的tomcat
tomcat的配置文件catalina.sh中增加(与jconsole配置一样):
JAVA_OPTS="-Djava.rmi.server.hostname=192.168.58.164
-Dcom.sun.management.jmxremote.port=9998
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
参数说明:
指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(9998端口不能被别的程序使用netstat -an|gerp 9998)
Dcom.sun.management.jmxremote.port=9998
指定了JMX是否启用ssl
Dcom.sun.management.jmxremote.authenticate=false
指定了JMX是否启用鉴权(需要用户名,密码鉴权)
Dcom.sun.management.jmxremote.authenticate=false
指定了服务器主机名
Djava.rmi.server.hostname=192.168.58.164

3、本机JDK打开执行程序添加远程主机

posted @ 2023-05-13 16:38  姜旭凌  阅读(126)  评论(0)    收藏  举报