jdk自带监控程序jvisualvm的使用

监控小程序的配置

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

Original: https://www.cnblogs.com/firstdream/p/11173471.html
Author: 有梦就能实现
Title: jdk自带监控程序jvisualvm的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543257/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • IO流简述

    IO流 1.什么是IO流 ​ java中所有的流都是子java.io下。首先我们看一下什么是IO,I就是Input,O就是Output,也就是输入输入的意思。 这里的输入输入都是相…

    Java 2023年6月9日
    081
  • 20220923-冒泡排序及自定义冒泡排序

    package com.zhz.arrays; import java.util.Arrays; import java.util.Comparator; /** * @autho…

    Java 2023年6月15日
    047
  • 实体类null属性滤除

    背景:用一个实体类传输数据的过程中,经常会有部分属性不需要传值,但是还是传到前端,但是显示的值为null,影响美观 需求:用实体传输时,有值的属性传,没有值的属性进行滤除 实现: …

    Java 2023年6月8日
    045
  • 2022最新版SSM源码分析:一套教程助你深入理解底层原理,提高核心竞争力!

    众所周知SSM源码分析教程里面包括Mybatis、Spring以及SpringMVC这三个经典的开源框架的源码分析。我们编程人员技术提升逃不过的一个重要方式就是阅读和理解优秀开源项…

    Java 2023年6月9日
    089
  • Spring mvc源码分析系列–Servlet的前世今生

    Spring mvc源码分析系列–Servlet的前世今生 概述 上一篇文章Spring mvc源码分析系列–前言挖了坑,但是由于最近需求繁忙,一直没有时间…

    Java 2023年6月8日
    080
  • MySQL高级

    事务是一个不可分割的工作逻辑单元。 举例:张三和李四账户中各有100块钱,现李四需要转换500块钱给张三,具体的转账操作为: 第一步:查询李四账户余额 第二步:从李四账户金额 -5…

    Java 2023年6月14日
    073
  • Nginx: 解决反代时,超过1分钟Gateway Timeout 504问题

    打开Nginx的配置文件中,在对应的反代域名下,添加 proxy_connect_timeout 300;proxy_send_timeout 300;proxy_read_tim…

    Java 2023年5月30日
    076
  • 将一个数随机拆分成多个整数

    2 * 将一个数随机拆分为多&#x4E2…

    Java 2023年6月6日
    086
  • 【SpringCloud-Alibaba系列教程】2.搭建用户微服务模块

    本节是陆续搭建系统和编码的开始,我们会优先完成一个基础工程的创建。一般在互联网企业这部分工作可能不需要反复处理,只需要在承接产品需要后使用脚手架或者直接复制以往工程就可以创建现有需…

    Java 2023年6月5日
    079
  • Anaconda3+CUDA10.1+CUDNN7.6+TensorFlow2.6安装(Ubuntu16)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kuberne…

    Java 2023年6月8日
    081
  • java List去掉重复元素的几种方式

    List words= Arrays.asList("a","b","b","c","c&…

    Java 2023年6月7日
    068
  • 【干货】整理分布式技术框架常用的算法及策略

    将一些零散的知识点进行整理, 以便加深理解,方便查阅,也希望能帮到大家。 通过系统随机函数,根据后端服务器列表的大小值来随机选择其中一台进行访问。由概率统计理论可以得知,随着调用量…

    Java 2023年6月9日
    067
  • 图解不同版本的HTTP协议

    前言 大家好,我是蜗牛,今天我们聊聊HTTP协议,通过这篇文章我们能了解到不同版本HTTP优缺点、他们之间的性能差异以及现在主流的HTTP协议用的那个版本 HTTP/1.1 时代 …

    Java 2023年6月15日
    089
  • Mybatis-plus的自定义分页搭配sql Server数据库使用

    原文出处:mybatisplus查询分页并且排序报错解决方法,适用于自定义sql和sqlserver_十七梦的博客-CSDN博客 一开始使用过的是官方文档来写分页,结果出现了如果不…

    Java 2023年6月6日
    095
  • [springmvc]ssm框架整合超简单

    此整合没有具体的业务,因为ssm整合最难的点就在于配置文件的整合,因此这里只详细记录配置文件的整合 spring和dao整合将mybatis的配置文件的数据库连接和sqlsessi…

    Java 2023年6月6日
    098
  • LeetCode组合总和

    组合总和 前言 在上篇文章通过组合问题看透回溯法当中我们通过介绍一个组合问题,仔细地分析了组合问题的回溯过程。我们之后会继续介绍一些比较经典的回溯算法题,帮助深入彻底理解回溯算法的…

    Java 2023年6月8日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球