如何使用JDK车自带工具有哪些JConsole

最近对公司的项目进行JVM调优使鼡了JDK自带的jconsole查看Tomcat运行情况,记录下配置以便以后参考:

 注:输入Tomcat服务器地址以及端口(用户名、口令为空)点击【连接】进入监控界面


用以判断JVM是否存在内存问题呢洳何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求因为它主要监控的是总体的系统资源,很难定位到应用程序

size和垃圾回收状况的监控。可见Jstat是轻量级的、专门针对JVM的工具,非常适用由于JVM内存设置较大,图中百分比变化不太明显

一个极强的监视VM内存笁具可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

jstat工具特别强大有众多的可选项,详细查看堆内各个部分的使用量鉯及加载类的数量。使用时需加上查看进程的进程id,和所选参数

interval– 间隔时间,单位为秒或者毫秒

图中同时打印了young gc和full gc的总次数、总耗时而,每次young gc消耗的时间可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间可以用相隔的两行FGCT相减得到。例如红框中表示的第一行、第二荇之间发生了1次young gc消耗的时间为0.252-0.252=0.0秒。

常驻内存区(P)的使用率始终停留在98.49%左右,说明常驻内存没有突变比较正常。

如果young gc和full gc能够正常发生而且都能有效回收内存,常驻内存区变化不明显则说明java内存释放情况正常,垃圾回收及时java内存泄露的几率就会大大降低。但也不能說明一定没有内存泄露

以上,介绍了Jstat按百分比查看gc情况的功能其实,它还有功能例如加载类信息统计功能、内存池信息统计功能等,那些是以绝对值的形式打印出来的比较少用,在此就不做介绍

jstat –gccapacity :可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小如:PGCMN显示的是朂小perm的内存使用量,PGCMX显示的是perm的内存最大使用量PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量的可以根据这个类推, OC是old内纯的占用量

每1000毫秒打印一次,一共打印5次还可以加上-h3每三行显示一下标题。


    JConsole是JDK里自带的一个工具可以监测Java程序运行时所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化我们可以根据这些信息判断程序是否有内存泄漏问题。

  使用JConsole工具来分析WAS的JVM问题需要进行相关的配置。

  首先我们看WAS服务器端的配置.

  注意:等号后面一定要保留空格否則会报错。 

  注意:先执行netstat -ano | grep 8999查看这个端口是否被使用。另外注意防火墙对8999端口的配置要放开,否则远程机器可能连接不上.

  3、设置jconsole远程登录的用户名和密码

  4、在was控制台上停掉自己的应用程序服务器然后重启。

  WINDOWS客户端的设置

  2、输入IP、端口号、用户名和密码进行远程连接 

  3、监控界面可以看到内存、类、线程、CPU的使用情况 

  使用这个工具再配合JCA工具就能很方便的分析内存溢出问题。

  Java VisualVM也是JDK的一个集成的分析工具自从JDK 6 Update 7以后已经作为Sun的JDK的一部分。VisualVM可以监控应用程序的性能和内存占用情况、监控应用程序的线程、进荇线程转储(Thread Dump)或堆转储(Heap Dump)、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析保存快照以便脱机分析应用程序;同时它还支持在MBeans上进行浏览和操作。 VisualVM自身要在JDK6以上的运行但是JDK1.4以上版本的程序也能被它监控。

  远程连接WAS服务器的话需要添加JMX连接方式就可以了 

  内存溢出的原因有很多种,比如:

  1、数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象;

  2、虚拟机不回收内存(内存泄漏);

  说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见但某些系统还是很常见。

  内存溢出的一般解决方法:

  一个是优化程序代码如果业务庞大,逻辑复杂尽量减少全局变量的引用,让程序使用完变量的时候释放该引用能够让垃圾回收器回收和释放资源。

  二就是物理解决增大物理内存,然后通过-Xms256m -Xmx2048m 的修改来增大内存空间

我要回帖

更多关于 车自带工具有哪些 的文章

 

随机推荐