监控利器之使用JConsole轻松监控JVM运行情况
jdk本身给我们提供了两种工具用于监控JVM运行情况,其中一个是Jconsole,还有一个是jvisualvm,这两个工具都安装在jdk的bin目录下:
本文我们使用jconsule来监控jvm的运行情况。
启动项目
首先我们看一下项目的tomcat基本配置信息:
端口号为60021,tomcat最大线程数为200,最小线程数为10
现在我们启动项目:
项目已经启动了,接下来我们去查看jconsole的运行情况查看jconsole
在jdk的bin目录下,我们双击jconsole.exe就可以启动程序了
Jconsole支持本地进程查看,还可以连接远程进程,比如我们服务部署在linux上面,就可以远程连接linux,来查看服务的运行情况,现在我们点击我们的本地服务打开页面,就是打了马赛克的那个服务,选择不安全的连接
主页信息,展示一个综合信息,包括,堆内存使用量,线程数,加载的类的数量,cpu占用率
当然我们也可以点击左上角的按钮,选择对应的模块只查看该模块信息,现在我们点击线程模块,去查看线程的使用情况
在线程这个模块可以看到tomcat初始化的10个线程,如果你要问我怎么知道这个就是tomcat初始化的10个线程,从两个方面来分析:
一、 tomcat线程命名就是这样的,这是经验,当然大家也可以去程序里面打印获取当前线程的名称,然后运行程序,就知道线程名称了。
二、 我们进行服务调用验证一下喽。
- 服务调用
我们简单写一个服务调用的方法,进行循环调用
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使用率,堆内存使用量都有明显变化
- 再次查看jconsole
当我们停止请求,可以看到,线程数又恢复之前的情况,而且只保留了10个线程,其余线程执行完任务,都被tomcat线程池给回收了。
cpu的使用率也慢慢趋于平缓了,当然堆内存使用量需要一段时间,等垃圾回收机制触发后才会慢慢下降
对比tomcat运行情况
我们重新修改程序tomcat配置参数,重新启动项目和jconsole
可以看到初始化tomcat只有5个线程:
然后我们再次请求可以看到,线程数最大到30,不会再次增加了,因为我们设置了最大线程数为30,而上面的演示最大线程都到了四五十了,因为上面最大线程数为200
停掉请求可以看到,线程只剩下5个了:
总结
Jconsole可以帮助我们查看线程池的运行情况,堆内存使用情况以及cpu占用情况,在线上环境可以监控,内存溢出,线程池的线程数不足,cpu使用突然飙高的情况。
当然针对以上情况我们也应该在程序中控制,
内存溢出优化:
递归调用优化;
不用的对象应该置空,垃圾回收机制可以快速回收释放内存,硬件增加内存。
cpu使用率突然飙高:
将定时任务与业务代码拆开分开部署,因为定时任务底层是采用死循环的机制,会增加cpu开销;
cas在使用时应该设置循环次数或者时间,不要一直循环;
引入监控系统,当cpu使用率超过一定值,系统会提示,进行风险的预控;
采用多核cpu。
线程池线程数不足:
合理增加最大线程数;
采用多核多线程cpu。
监控利器之使用JConsole轻松监控JVM运行情况相关推荐
- 监控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 ...
- springboot开启jms服务监控jvm运行情况
启动命令 nohup java -jar -Djava.rmi.server.hostname=服务所在ip -Dcom.sun.management.jmxremote -Dcom.sun.mana ...
- JVM运行时内存使用情况监控
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是由类加载器一步步解析, 执行与生成与内存区域中的; 并且jvm有自己的垃圾回收器对内存区域管理, 回收; 但是我们已经可以通过一些工具 ...
- 通过JCONSOLE监控TOMCAT的JVM使用情况
这个也是要学入一下,JVMr 虚拟机原理不可少. 参考配置URL": http://blog.163.com/kangle0925@126/blog/static/2775819820115 ...
- 用 jconsole 监控 WebSphere AppServer JVM使用情况
用 jconsole 监控 WebSphere AppServer JVM使用情况 环境描述: 服务端_OS:AIX 6.1 WebSphere: 6.1 客户端_OS: XP SP3 客户端JDK: ...
- JMX-JAVA进程监控利器
Java 管理扩展(Java Management Extension,JMX)是从jdk1.4开始的,但从1.5时才加到jdk里面,并把API放到java.lang.management包里面. 如 ...
- 【Flink on k8s】JConsole 远程监控 TaskManager
1.概述 转载:[Flink on k8s]JConsole 远程监控 TaskManager 问题:如何定位 Flink 作业卡在哪里? 首先,配置文件 flink-conf.yaml 添加 Jav ...
- visualvm远程监控jvm_别再说你不会 JVM 性能监控和调优了,看完这篇再发言
常用工具 常用工具主要有 JDK 自带工具与 Arthas 这两种工具. JDK 自带工具 jps 虚拟机进程状况工具 用于查看虚拟机进程状况的工具 命令示例 $ jps15236 Jps14966 ...
- 尚硅谷JVM下篇:性能监控与调优篇_03_JVM监控及诊断工具-GUI篇
目录 文章目录 目录 01-工具概述 02-JConsole 基本概述 启动 三种连接方式 Local Remote Advanced 主要作用 1.概览 2.内存 3.线程 4.概要 03-Visu ...
最新文章
- python数组不同地方
- BAPI_PO_CREATE1
- c++ 编译添加dll_VS2019编译lua源码
- JAVA NIO 实例
- go去掉最后一个字符_Go语言去除字符串中的指定字符
- win10user文件夹迁移_Win10用户文件如何从系统盘转到其他盘
- 阿里高专王夕宁:Istio网关之南北向流量管理
- java并发编程(二)多个线程多个锁
- LogManager分析
- java设计模式适配器模式_Java解释器设计模式
- Mysql环境变量配置WIN10(保姆级)
- 2009英国电子工程学专业排名
- virtualization technology设置
- Android源码阅读工具AndroidXRef使用说明
- App隐私合规协议(第三方SDK)说明
- Python将pdf转为png
- [报错] SyntaxError: Missing parentheses in call to ‘exec‘
- pg 快速造1000w测试数据
- 彷徨 | HBase的详细介绍(概念以及特性)
- spss/amos评价分类(问卷调查)matlab(模糊综合评价+AHP层次分析法模型)