jdk本身给我们提供了两种工具用于监控JVM运行情况,其中一个是Jconsole,还有一个是jvisualvm,这两个工具都安装在jdk的bin目录下:

本文我们使用jconsule来监控jvm的运行情况。

  1. 启动项目
    首先我们看一下项目的tomcat基本配置信息:

    端口号为60021,tomcat最大线程数为200,最小线程数为10
    现在我们启动项目:

    项目已经启动了,接下来我们去查看jconsole的运行情况

  2. 查看jconsole
    在jdk的bin目录下,我们双击jconsole.exe就可以启动程序了

Jconsole支持本地进程查看,还可以连接远程进程,比如我们服务部署在linux上面,就可以远程连接linux,来查看服务的运行情况,现在我们点击我们的本地服务打开页面,就是打了马赛克的那个服务,选择不安全的连接

主页信息,展示一个综合信息,包括,堆内存使用量,线程数,加载的类的数量,cpu占用率

当然我们也可以点击左上角的按钮,选择对应的模块只查看该模块信息,现在我们点击线程模块,去查看线程的使用情况

在线程这个模块可以看到tomcat初始化的10个线程,如果你要问我怎么知道这个就是tomcat初始化的10个线程,从两个方面来分析:
一、 tomcat线程命名就是这样的,这是经验,当然大家也可以去程序里面打印获取当前线程的名称,然后运行程序,就知道线程名称了。
二、 我们进行服务调用验证一下喽。

  1. 服务调用
    我们简单写一个服务调用的方法,进行循环调用
public class Test {public static void main(String[] args) throws URISyntaxException, IOException {while (true) {// 声明URIBuilderURIBuilder uriBuilder = new URIBuilder("http://127.0.0.1:60021/v1/api/label?pageSize=500");// 2 创建httpGet对象,相当于设置url请求地址HttpGet httpGet = new HttpGet(uriBuilder.build());httpGet.addHeader("potato-tenant-id", "72");httpGet.addHeader("potato-client-id", "72");// 3 使用HttpClient执行httpGet,相当于按回车,发起请求HttpClient httpClient = HttpClients.createDefault();HttpResponse response = httpClient.execute(httpGet);// 解析数据封装HttpResultif (response.getEntity() != null) {System.out.println(EntityUtils.toString(response.getEntity(), "UTF-8"));} else {System.out.println(response.getStatusLine().getStatusCode());}}}
}

运行程序,我们再次查看jconsole情况

可以看到,线程数立即激增,同时cpu使用率,堆内存使用量都有明显变化

  1. 再次查看jconsole
    当我们停止请求,可以看到,线程数又恢复之前的情况,而且只保留了10个线程,其余线程执行完任务,都被tomcat线程池给回收了。

cpu的使用率也慢慢趋于平缓了,当然堆内存使用量需要一段时间,等垃圾回收机制触发后才会慢慢下降

  1. 对比tomcat运行情况
    我们重新修改程序tomcat配置参数,重新启动项目和jconsole

    可以看到初始化tomcat只有5个线程:

    然后我们再次请求可以看到,线程数最大到30,不会再次增加了,因为我们设置了最大线程数为30,而上面的演示最大线程都到了四五十了,因为上面最大线程数为200

    停掉请求可以看到,线程只剩下5个了:

  2. 总结
    Jconsole可以帮助我们查看线程池的运行情况,堆内存使用情况以及cpu占用情况,在线上环境可以监控,内存溢出,线程池的线程数不足,cpu使用突然飙高的情况。
    当然针对以上情况我们也应该在程序中控制,
    内存溢出优化:
    递归调用优化;
    不用的对象应该置空,垃圾回收机制可以快速回收释放内存,硬件增加内存。
    cpu使用率突然飙高:
    将定时任务与业务代码拆开分开部署,因为定时任务底层是采用死循环的机制,会增加cpu开销;
    cas在使用时应该设置循环次数或者时间,不要一直循环;
    引入监控系统,当cpu使用率超过一定值,系统会提示,进行风险的预控;
    采用多核cpu。
    线程池线程数不足:
    合理增加最大线程数;
    采用多核多线程cpu。

监控利器之使用JConsole轻松监控JVM运行情况相关推荐

  1. 监控j服务器jvm运行情况 - spring boot jvisualvm

    1.准备 spring boot 1.x java 1.8 jvisualvm.exe 2.启动 java -jar xx.jar 添加参数 -Djava.rmi.server.hostname=16 ...

  2. springboot开启jms服务监控jvm运行情况

    启动命令 nohup java -jar -Djava.rmi.server.hostname=服务所在ip -Dcom.sun.management.jmxremote -Dcom.sun.mana ...

  3. JVM运行时内存使用情况监控

    java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是由类加载器一步步解析, 执行与生成与内存区域中的; 并且jvm有自己的垃圾回收器对内存区域管理, 回收; 但是我们已经可以通过一些工具 ...

  4. 通过JCONSOLE监控TOMCAT的JVM使用情况

    这个也是要学入一下,JVMr 虚拟机原理不可少. 参考配置URL": http://blog.163.com/kangle0925@126/blog/static/2775819820115 ...

  5. 用 jconsole 监控 WebSphere AppServer JVM使用情况

    用 jconsole 监控 WebSphere AppServer JVM使用情况 环境描述: 服务端_OS:AIX 6.1 WebSphere: 6.1 客户端_OS: XP SP3 客户端JDK: ...

  6. JMX-JAVA进程监控利器

    Java 管理扩展(Java Management Extension,JMX)是从jdk1.4开始的,但从1.5时才加到jdk里面,并把API放到java.lang.management包里面. 如 ...

  7. 【Flink on k8s】JConsole 远程监控 TaskManager

    1.概述 转载:[Flink on k8s]JConsole 远程监控 TaskManager 问题:如何定位 Flink 作业卡在哪里? 首先,配置文件 flink-conf.yaml 添加 Jav ...

  8. visualvm远程监控jvm_别再说你不会 JVM 性能监控和调优了,看完这篇再发言

    常用工具 常用工具主要有 JDK 自带工具与 Arthas 这两种工具. JDK 自带工具 jps 虚拟机进程状况工具 用于查看虚拟机进程状况的工具 命令示例 $ jps15236 Jps14966 ...

  9. 尚硅谷JVM下篇:性能监控与调优篇_03_JVM监控及诊断工具-GUI篇

    目录 文章目录 目录 01-工具概述 02-JConsole 基本概述 启动 三种连接方式 Local Remote Advanced 主要作用 1.概览 2.内存 3.线程 4.概要 03-Visu ...

最新文章

  1. python数组不同地方
  2. BAPI_PO_CREATE1
  3. c++ 编译添加dll_VS2019编译lua源码
  4. JAVA NIO 实例
  5. go去掉最后一个字符_Go语言去除字符串中的指定字符
  6. win10user文件夹迁移_Win10用户文件如何从系统盘转到其他盘
  7. 阿里高专王夕宁:Istio网关之南北向流量管理
  8. java并发编程(二)多个线程多个锁
  9. LogManager分析
  10. java设计模式适配器模式_Java解释器设计模式
  11. Mysql环境变量配置WIN10(保姆级)
  12. 2009英国电子工程学专业排名
  13. virtualization technology设置
  14. Android源码阅读工具AndroidXRef使用说明
  15. App隐私合规协议(第三方SDK)说明
  16. Python将pdf转为png
  17. [报错] SyntaxError: Missing parentheses in call to ‘exec‘
  18. pg 快速造1000w测试数据
  19. 彷徨 | HBase的详细介绍(概念以及特性)
  20. spss/amos评价分类(问卷调查)matlab(模糊综合评价+AHP层次分析法模型)

热门文章

  1. 5V变3.3V好用的电源芯片
  2. 一个自动将状态机生成代码的软件
  3. 易经八卦原理图谱和记忆方法总结
  4. 后缀名为.cpa文件结尾的数据包文件解析
  5. json>object>bean
  6. 新浪手机博客﹐问题还很多
  7. 3D人脸精准数据获取设备--(转载)
  8. 想要软件外包,企业开发APP和小程序如何才能不吃亏?
  9. 日期计算(一个日期是本年的第几天)
  10. android:layout_margin真实含义 及 自定义复合控件 layout()执行无效的问题解决