3 - JVM随笔分类(gc.log ,VisualVM插件介绍,VisualVM远程链接方式介绍)

对于对应用的监控上可使用Jdk自带的VisualVM来作可视化监控,能够查看当前服务应用进程的堆大小的走向,以及类的加载数量等,除此以外,VisualVM能够支持不少的可视化的插件添加,在对应的工具->插件一栏,此处经过修改默认的插件中心的连接后( https://blog.csdn.net/keketrtr/article/details/74448127)下载了对应的Visual GC插件(如图2),能够查看对应的JVM的老年代,Eden,Surivor等内存区域的对象内存走向,。因此经过VisualVM基本已经能够获取应用的一个基本的内存使用走向,若是须要知道当前堆内存中所加载的最大的类的一些更详细的信息,则须要拉出来dump文件,在mat里面作下分析,能够获得对应的结果,或者使用jstat -gc 的命令或者jmap的命令能够查看对应的分区和对象个数的使用状况等( https://www.jianshu.com/p/bb9e48cc77ce),还要一个是gchisto专门能够作gc.log日志的分析工具,在上面第一个URL中也有介绍,使用gchisto的好处是,除了能够人工的详细的分析gc.log日志外,gchisto也能够add添加日志进行分析 统计出对应的gc次数,Minor GC次数和Full GC的次数等以及消耗的时间和百分比等。,还有一个是美团的一个对应的监控工具等,也是能够参考的,后续再查下相关文章后,再思考后,再作下相关记录,
图1:
 
图2:
 
除了上面提到的VisualGC外,VIsualVM还包含不少其余的插件,简单作一些介绍,
VisualGC:在VisualVM中使用VIsualGC主要是能够清晰的GC日志的总体统计信息,如Eden区的清理次数,Eden区域GC清理时总的耗费时间,以及能够动态看到堆内存中Eden区等各个区域总体的递增状况,多长时间会到达一个Eden内存满的一个量级等。
关于VisualGC的参数介绍能够参考: https://www.cnblogs.com/reycg-blog/p/7805075.html
JConsole Plugins:VisualVM中能够添加Jconsole Plugins的插件,Jconsole Plugins插件能够经过添加Jtop jar包的方式增长监控方式,以下; https://lixjluck.iteye.com/blog/713782,也能够打开对应的JDK1.6\demo\management\JTop下的README.txt查看对应的Jtop介绍,此处简单提一下,增长了Jtop的监控方式后,能够显示对应的线程所占用CPU的资源,以及线程的状态,如图所示:
 
上述的插件添加JConsole Plugins等的方式除了最上面所提到的插件搜索的方式外,也能够经过离线模式下安装插件,仍是在对应的 https://visualvm.github.io/pluginscenters.html  visualVM的插件中心中,打开想要添加的jdk的版本的插件,点击对应的指定版本的url连接:
 
而后将会跳转到对应的下图所示的页面中:
 
点击对应的所须要安装的tool(工具),将会下载到你的本地中,最后,在对应的VisualVM中,插件->工具中,选择“已下载”的tab,而后点击添加插件后,选择对应的已下载的插件点击安装便可。
 
除此以外,Mbean以及Btrace(调试代码的插件)等插件,还有JDK的JConsole的工具,也是很ok的,只是做用的方向不同,Jconsole能够更加动态的看到堆内存的折线图等。
 
远程服务开启JMX,用于VisualVM 和 Jconsole链接
在对应的服务启动的JVM配置参数上,新增以下参数:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=22222
其中port表示对应的连接端口,上述JVM连接方式为非安全凭证直接登陆的方式,若是须要再JvisualVM添加JMX的远程链接时使用安全凭证,帐户和密码登陆时,则能够参考第二个连接的设置方式,若是涉及到对应的防火墙端口开启的问题也可参考第二个URL连接
在正常开启了JMX连接后,使用Jconsole和JvisualVM均可以使用 添加JMX的连接方式 进行链接。
 
开启JVM的Jstatd服务,使其VisualGC能够正常支持GC监控
  1. 在对应的JDK的bin目录下新增 jstatd.all.policy 文件,
  1. 添加对应的policy文件后,在对应的bin目录下,执行Jstatd服务,以下方式( ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi. server .hostname= 192.168 .134 .128 -p 3333 -J-Djava.rmi. server .logCalls= true
  2. 其中 hostname=**** 表示当前服务的IP地址,-p 3333 表示连接该Jstatd的端口,其中 -J-Djava.rmi.server.logCalls=true 表示打开日志输出,在客户端连接该Jstat服务时,将会有日志输出,能够进行方便排错等,固然也能够不设置该参数,则默认为不输出日志
  3. 在开启了 Jstatd的服务后,此时则不能使用Ctrl +C 的快捷键,由于Ctrl +C 后,则表示直接中止到服务,因此这也意味着该服务进程是必须持续开启的状态,(能够查看下相关资料,是否能够持续化进程开启,而不是随着控制台的退出而进程关闭等,或者将Jstatd的服务开启进程直接根据Java服务运行时直接跟随开启,在对应Options参数中,开启Jstatd进程等,是否OK,但目前是开启Jstat进程后,新开一个新的Sheel窗口来进行其余的命令操做,而上个开启Jstatd服务进程的窗口则暂不保持关闭便可)
  4. 开启了对应的Jstat服务后,能够经过 lsof -i : port(端口) 和  netstat -anp|grep *jstatd 的方式来查看该端口是否正常开启和监控状态
 
具体的新增,jstatd.all.policy文件后,所添加的相关代码的介绍,能够参考下面的几个连接,
在启动了对应的jstatd的服务进程后,能够在VisualVM的远程主机上,右键点击 “添加Jstatd连接”的方式进行远程的Jstatd的连接,须要注意的是,开启且VisualVM连接了对应的Jstatd的服务监控进程后,须要从新打开上述所连接的JMX的监控连接后,就能够看到该监控连接中的Visual GC的展现监控页面了。
ll | wc -l 查看目录下文件总量
 

版权声明html


做者:Arnold zhaojava

出处:博客园Arnold的技术博客--https://www.cnblogs.com/zh94/git

您的支持是对博主最大的鼓励,感谢您的认真阅读。github

本文版权归做者全部,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留任何追究法律责任的权利。web

相关文章
相关标签/搜索