jdk自带监控程序jvisualvm的使用

  1. 监控小程序的配置
  1. 生产环境tomcat的配置

编辑应用所在的tomcat服务器下的bin目录下的catalina.sh文件,修改如下:

配置如下内容:

export JAVA_OPTS="-Xms256m -Xmx512m -Xss256m -XX:PermSize=512m -XX:MaxPermSize=1024m  -Djava.rmi.server.hostname=136.64.45.24 -Dcom.sun.management.jmxremote.port=9315 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

红字内容需要进行添加,黄色背景的需要根据具体的主机情况配置。

  1. 本地jdk小工具的配置

进入到本地的jdk安装目录下,找到jvisualvm.exe,双击打开

 

建立远程连接

图一 添加远程

jdk自带监控程序jvisualvm的使用_第1张图片

图二 建立远程主机ip

 

图三 添加jmx连接

jdk自带监控程序jvisualvm的使用_第2张图片

图四 双击建立好的连接可以实时查看当前程序的运行状况和堆栈信息等

jdk自带监控程序jvisualvm的使用_第3张图片

         监控小程序菜单截图

图一 概述:显示当前tomcat服务器的整体运行状况

jdk自带监控程序jvisualvm的使用_第4张图片

图二:可事实动态显示cpu、堆栈、类、线程的相关信息

jdk自带监控程序jvisualvm的使用_第5张图片

图三:线程:可实时动态的显示进程的使用状况

jdk自带监控程序jvisualvm的使用_第6张图片

点击线程Dump按钮可以显示具体的进程的内容,可从此页面查看到进程的具体信息以及报错信息

jdk自带监控程序jvisualvm的使用_第7张图片

(4)通过此工具的使用,当ITSM系统僵死时,可看到明显的进程变化

a.所有的请求进程都进入了监控状态,所有请求都无法访问

           jdk自带监控程序jvisualvm的使用_第8张图片

  1. 查看dump信息,发现ITSM系统首页的报表获取sql存在问题,访问量增多时,打开首页查询比较慢,链接释放缓慢,然后新增请求,导致链接池被沾满,出现了上述问题。

jdk自带监控程序jvisualvm的使用_第9张图片

  1. 故障解决方案

通过上述分析,查看连接池配置,对连接池的活动连接数和空闲连接数做了调账,如下图:jdk自带监控程序jvisualvm的使用_第10张图片

同时找到对应的sql语句进行优化,之前的sql存在笛卡尔积,同时数据量大,没有建立索引,通过dba的分析修改了sql语句,并对timeouttime字段建立索引,截图如下(包含原有sql【被注释了】)

jdk自带监控程序jvisualvm的使用_第11张图片

  1. 知识扩展

Jdk自带的监控小工具可用来对java程序进行调优和问题分析。

应用僵死后是否有dump或javacore文件生成?拿到后用MemoryAnalyzer 工具分析一下

如果没有,可以用jdk自带的小工具看一下,是否有资源未释放、线程死锁、内存溢出等问题

 

============================================================

jstack ( 查看jvm线程运行状态,是否有死锁现象等等信息)
jinfo:可以输出并修改运行时的java 进程的opts 
jps:
unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 
jstat:
一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 
jmap:
打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。 
jconsole:
一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM 

详细:在使用这些工具前,先用JPS命令获取当前的每个JVM进程号,然后选择要查看的JVM 
jstat
工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。 
jstat -class pid:
显示加载class的数量,及所占空间等信息。 
jstat -compiler pid:
显示VM实时编译的数量等信息。 
jstat -gc pid:
可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 
jstat -gccapacity:
可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OCold内纯的占用量。 
jstat -gcnew pid:new
对象的信息。 
jstat -gcnewcapacity pid:new
对象的信息及其占用量。 
jstat -gcold pid:old
对象的信息。 
jstat -gcoldcapacity pid:old
对象的信息及其占用量。 
jstat -gcpermcapacity pid: perm
对象的信息及其占用量。 
jstat -util pid:
统计gc信息统计。 
jstat -printcompilation pid:
当前VM执行的信息。 
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。 

jmap
是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。 
命令:jmap -dump:format=b,file=heap.bin  
file
:保存路径及文件名 
pid
:进程编号 
•jmap -histo:live  pid| less :
堆中活动的对象以及大小 
•jmap -heap pid :
查看堆的使用状况信息 


jinfo:
的用处比较简单,就是能输出并修改运行时的java进程的运行参数。用法是jinfo -opt pid 如:查看2788MaxPerm大小可以用 jinfo -flag MaxPermSize 2788 

jconsole
是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。使用方法:命令行里打 jconsole,选则进程就可以了。 
JConsole
中关于内存分区的说明。 

Eden Space (heap)
内存最初从这个线程池分配给大部分对象。 
Survivor Space (heap)
:用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。 
Tenured Generation (heap)
:用于保持已经在 survivor space内存池中存在了一段时间的对象。 
Permanent Generation (non-heap):
保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的, 
Code Cache (non-heap):HotSpot Java
虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做代码缓存区code cache 

•jstack (
查看jvm线程运行状态,是否有死锁现象等等信息) : jstack pid : thread dump 
•jstat -gcutil  pid  1000 100  : 1000ms
统计一次gc情况统计100次; 

 

你可能感兴趣的:(jdk自带监控程序jvisualvm的使用)