美文网首页
jdk自带监控程序jvisualvm的使用

jdk自带监控程序jvisualvm的使用

作者: 公子小白123 | 来源:发表于2021-02-22 08:31 被阅读0次

    监控小程序的配置

    生产环境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"

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

    本地jdk小工具的配置

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

    建立远程连接

    图一 添加远程

    图二 建立远程主机ip

    图三 添加jmx连接

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

             监控小程序菜单截图

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

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

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

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

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

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

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

    故障解决方案

    通过上述分析,查看连接池配置,对连接池的活动连接数和空闲连接数做了调账,如下图:

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

    知识扩展

    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内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。

    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 如:查看2788的MaxPerm大小可以用 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的使用

          本文链接:https://www.haomeiwen.com/subject/hncqzktx.html