性能测试中JVM监控分析技术

前言:好久没有更新博客了啊,最近实在是太忙了,虽然刚来新公司四个月,刚刚转正一个但博主准备明天去跟领导提离职了,实在无法接受几乎没有空闲时间的工作,生活中还有太多太多美好的事情不想错过,现在想想啊其实钱也不是那么重要。哈哈哈哈。

好了不发牢骚了步入正题吧。其实在前面关于性能测试章节博主主要写了关于监控服务器性能方面的东西,今天jvm监控也是在性能测试中比较一个点。

这篇博客博主打算只讲解一个在性能测试过程中jvm需要关注的点,想要深入了解jvm的朋友请自行查阅相关资料。

JVM的GC机制:

在讲解jvm中的gc机制前先带着大家稍微了解一个堆栈的概念。

堆:一般相对于内存的概念,空间一般很大,

栈:运行速度快,一般不会存大量数据的地方,一般就1M到2M这样子。

GC机制:查看进程中堆的内存,分辨哪些对象还在被使用,哪些对象已经不在使用,并删除对象的过程。后面就有小伙伴在想了啊,我们做性能测试的为什么要关注gc呢,因为啊,进程每进行一次GC整个tomcat会停下来来处理各个gc从而对性能就会造成一定的影响,频繁gc的话系统的响应时间会很久很久,gc中的两个核心点,不能频繁gc每次gc的时间不能太久。GC的好不好完全影响tomcat的响应时间的。

下面我们来看看看整个GC是怎么处理的呢。

堆的组成 :年轻代+S0+S1+年老代:年轻代迭代很快当发现当中的数还有人用就立马将数据转换成s0或者s1中,当s0,s1中的数据还在使用时,则会将数据放到年老代中,当年老代中的数据达到一定的数量后就会fullgc一次,当fullgc时整个tomcat不会响应会去处理整个gc操作。

GC的回收过程:刚开始对象都会被分配到年轻代中,在年轻代中的对象会被进行计数,被频繁使用的对象会被调到幸存区(S0,S1)中,当对象经历多次GC仍然没有被清理,该对象会被认为有一个较长的生命周期,从而被移到年老代中,当年老代中对象到达一定数量时会自动fullgc一次清理掉。当然堆的大小都是可以修改的,结合当前机器的资源修改。

jvisualvm监控工具:这个监控工具是专门用来监控jvm的,这个工具不用单独的下载,只要电脑中有jdk,到jdk的安装目录bin目录下即可找到,直接打开使用即可。

在使用前我们先安装一个插件,点击工具---插件---安装visual GC插件。点击本地的visual vm即可看到jvisualvm这个进程对于本机资源占用,点击远程输入需要监控远程服务器的地址,添加完毕后右击远程机器的地址,添加JMX连接,jstatd连接。

这里为什么要添加两个连接呢。JMX监控方式,缺陷:没有GC监控功能  Jstatd监控方式,缺陷:没有cpu监控画面。两个起来看就完整了。

下面修改一个需要监控服务器的vim /usr/local/apache/Tomcat7-8083/bin/catalina.sh将下面的配置直接添加到文件中即可。

#!/bin/sh

export JRE_HOME=/usr/local/jdk1.7.0_80

JAVA_OPTS='-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m     

           -Djava.rmi.server.hostname=服务器ip

           -Dcom.sun.management.jmxremote.port=10001

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

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

重启tomcat,其中Xms表示年轻代大小,Xmx代表年老代大小。堆大小的配置建议不要超过机器内存的80%

在/usr/local/apache/Tomcat7-8083/lib增加catalina-jmx-remote.jar(这个jar网上自行下载,这里博主就不提供啦)

systemctl start firewalld                  ##开启防火墙

firewall-cmd --add-port=10001/tcp --permanent     ##永久添加10001端口

firewall-cmd --add-port=10002/tcp --permanent     ##永久添加10002端口

firewall-cmd --add-port=10003/tcp --permanent     ##永久添加10003端口

firewall-cmd --add-port=1099/tcp --permanent     ##永久添加1099端口

firewall-cmd --list-ports                    ##列出开放的端口

systemctl stop firewalld                  ##关闭防火墙

验证是否成功:

好了下面添加一个jstatd连接:

修改jdk配置文件--/usr/local/jdk1.7.0_80/jre/lib/security/java.policy 在文件末尾添加permission java.security.AllPermission;---修改后保存

cd /usr/local/jdk1.7.0_80/bin

       ./jstatd -J-Djava.security.policy=all.policy -p 10003 &

全部配置完全后即可成功监控到jvm堆内存的使用情况。

猜你喜欢

转载自blog.csdn.net/HUJIANLAILE/article/details/108439107