对于对应用的监控上可以使用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 查看目录下文件总量
 

版权声明


作者:Arnold zhao

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

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

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留任何追究法律责任的权利。

3 - JVM随笔分类(gc.log ,VisualVM插件介绍,VisualVM远程连接方式介绍)的更多相关文章

  1. 2 - JVM随笔分类(JVM堆的内存回收)

    JVM常用的回收算法是: 标记/清除算法 标记/复制算法 标记/整理算法 其中上诉三种算法都先具备,标记阶段,通过标记阶段,得到当前存活的对象,然后再将非标记的对象进行清除,而对象内存中对象的标记过程 ...

  2. 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))

    java虚拟机的内存区域分配   在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...

  3. VisualVM通过密码JMX远程连接JVM

    如果本地安装了JDK,则在${java.home}/bin/下可找到jvisualvm.exe,双击打开即可使用.否则,去官网下载一个,解压即可使用.现有一个springboot程序springboo ...

  4. visualvm 插件 visual gc 使用介绍

    visual gc 是 visualvm 中的图形化查看 gc 状况的插件. 具体详细介绍可参照: http://www.oracle.com/technetwork/java/visualgc-13 ...

  5. JVM中的GC算法,JVM参数,垃圾收集器分类

    一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1 ...

  6. eclipse的优化 gc.log

    原帖:http://www.javaeye.com/topic/756538 性能优化从身边做起. 首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse.优化的用例就是启 ...

  7. java jvm内存管理/gc策略/参数设置

    1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想 ...

  8. JVM 1.6 GC

    JVM调优是一门艺术. JVM调优的重点是减少Major GC的次数,因为Major GC会暂停程序比较长的时间.如果Major GC的次数比较多,意味着应用程序的JVM内存参数需要调整. JVM内存 ...

  9. JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)

    引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们的能力. 那么分代搜集算法是怎么处理GC的呢? 对象分 ...

随机推荐

  1. bank conflct 一句话总结

    由于最新的多播模式区别于原来的广播模式,原来同一个warp不同线程访问同一个bank的相同地址不再是bank conflict, 现在总结为:只要同一个 warp 的不同线程会访问到同一个 bank ...

  2. javascript HTML静态页面传值的四种方法

    一:JavaScript静态页面值传递之URL篇能过URL进行传值.把要传递的信息接在URL上.Post.htm 代码如下: <input type="text" name= ...

  3. pta 编程题14 Huffman Codes

    其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路 ...

  4. pat乙级1067

    1.用cin输入数据后,再用getline 输入,还是会输入cin已经输入的数据,即cin和getline互相独立. 2.题目中没有说尝试的密码不包含空格,因此不能用cin,而用getline. #i ...

  5. java Vamei快速教程06 组合

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经尝试去定义类.定义类,就是新建了一种类型(type).有了类,我们接着构造 ...

  6. 【BZOJ1216】[HNOI2003] 操作系统(堆+模拟)

    点此看题面 大致题意: 有\(n\)个任务,每个任务有4个属性:编号.到达时间.执行时间和优先级.每个单位时间,会执行一个优先级最高(若有多个优先级最高的,就先执行到达时间较早的)的任务,请你按完成的 ...

  7. 欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响

    项目中出现了二分类数据不平横问题,研究总结下对于类别不平横问题的处理经验: 为什么类别不平横会影响模型的输出? 许多模型的输出类别是基于阈值的,例如逻辑回归中小于0.5的为反例,大于则为正例.在数据不 ...

  8. js转换时间戳成日期格式

    <script> function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString().rep ...

  9. ArrayList集合例题,商品库存管理(集合)

    创建车库集合,存进车 public class demo1 { String pinpai; String c; int s; } import java.util.ArrayList; class ...

  10. Eclipse 发布 JAR

    明确要生成何种类型 jar 生成工具 jar,作为包被其他程序调用 具体步骤: 选中项目文件,点右键选择 Export ,JAR File 在弹出窗口选择,导出哪些文件,并且选择好 输出 JAR 的路 ...