性能测试 —— Tomcat监控与调优:Jconsole监控

JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具,JConsole使用Java虚拟机(Java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台,标准版(Java SE平台)6,JConsole的已经更新到目前的外观,类似于Windows和GNOME桌面(其他平台,将目前标准的Java图形的外观和感觉),在这个文件中提出的屏幕截图是从Windows XP上运行的接口的一个实例。
Jconsole是一个可执行文件,在Java根目录下有一个bin文件,该文件下可以找到jconsole文件,单击可直接运行该程序,如果将该jconsole的路径设置为环境变量,那么可以直接在开始菜单运行命令中直接键jconsole命令,来运行jconsole程序,如果未设置为环境变量,那么则需要写全路径。
启动JConsole程序的方式有两种:一种是带参数的启动;另外一种是不带参数启动。
带参数启动JConsole启动时,又分有两种情况:一种是监控本地进和;另一种是远程监控;
本地监控的命令格式如下:
JConsole processID
processID是指应用程序的进程ID(PID),可以使用以下方式确定一个应用程序的PID:
● 在UNIX或Linux系统,可以使用 ps命令找到正在运行的Java实例的PID;
● 在Windows系统上,可以使用任务管理器,找到java或者javaw进程的PID;
例如:如果监控JConsole程序,JConsole的进程号为5604,那么可以用下面的命令启动JConsole:
JConsole 5604
远程监控的命令格式如下:
JConsole 主机名:portNum
主机名是需要监听的主机,portNum是启动Java虚拟机时指定的JMX代理的端口号。
注意:使用JConsole监视本地应用程序在开发和创建原型是非常有用的,但不推荐用于生产环境,因为Jconsole本身也消耗大量的系统资源。
执行Jconsole程序时,不带任何参数命令,会弹出Jconsole新建链接对话框,如图10-6所示。

图10-6 Jconsole新建连接
Jconsole有两种监控方式:本地进程监控和远程监控。
●选择本地进程监控,在下面的列表框中会列出与JConsole程序相同用户的进程,选择其中一个进程,单击连接按钮,即可以进行监控的主界面。
●选择远程监控,需要的内容包括。主机名和JMX代理的端口号,以及访问服务器的用户名和密码。
当连接成功后,会弹出监控界面,如图10-7所示。

图10-7 监控主界面
监控的内容主要包括六个方面的内容:概述、内存、线程、类、VM摘要和MBean。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

概要信息
概要信息监控界面主要包括堆内存使用情况、线程数、Java VM中加载类和CPU使用情况。选中各视图可以切换监控的时间片段,同时也可以将视图中的数据保存在一个逗号分隔(CSV)文件中。
内存信息
内存监控信息主要提供了内存消耗和内存池的信息,如图10-8所示。

图10-8 内存监控信息
内存监控信息主要监控了两类内存消耗的信息:堆和非堆内存,这两种内存也是Java虚拟机管理的两种内存,这两者都是Java虚拟机启动时创建的。
● 堆内存是运行时数据区域,Java VM的所有类实例和数组分配内存,可能是固定或可变大小的堆。
● 非堆内存包括在所有线程和Java虚拟机内部处理或优化所需的共享的方法。它存储了类的结构、运行常量池、字段和方法数据,以及方法和构造函数的代码,方法区在逻辑上是堆的一部分,看具体实现的方式。根据实现方式的不同,Java虚拟机可能不进行垃圾收集或压缩。与堆内存一样,方法区域可能是一个固定或可变大小,方法区的内存不需要是连续的。
除了方法区,Java虚拟机可能需要进行内部处理或优化,这也属于非堆内存的内存。例如,实时(JIT)编译器需要内存用于存储从Java虚拟机的高性能的代码翻译的机器码。
Jconsole提供的监控的堆和非堆的内存主要包括以下几类:
Eden Space内存池:大多数对象初始化时分配的内存池;
Survivor Space内存池:这个内存池包含的对象是回收Eden Space内存池后所幸存的对象;
Tenured Gen内存池:这个内存池包含的对象是在Survivor Space内存池中已经存在一段时间的对象;
Code Cache内存池:包括HotSpot Java VM的代码缓存和编译、存储代码所消耗的内存;
Perm Gen[shared-rw]内存池:Perm Gen内存池中读写的区域;
Perm Gen[shared-ro]内存池:Perm Gen内存池中只读的区域;
Perm Gen内存池:该内存池包括虚拟机本身反射的数据,如类和方法,Java虚拟机在运行时会共享这些类数据区域,共享的区域有只读和读写两种方式。
在图表下拉列表框中可以选择不同内存池进行监控,并获得当前内存池所消耗的内存信息,此外右下角显示了堆和非堆的图标,切换显示的图表,内存池图表显示的内容也随着切换,如果显示为红色,那说明使用的内存超过内存的阀值。
内存池和内存管理器是Java虚拟机的内存系统的关键环节。
一个内存池表示Java虚拟机管理的内存区域。Java虚拟机至少有一个内存池,它可能在执行过程中创建或删除内存池,一个内存池可以属于堆或非堆内存。
一个内存管理器管理一个或多个内存池,垃圾收集器是一个负责回收不可达的对象使用内存的内存管理器,Java虚拟机可能有一个或更多的内存管理器,在执行过程中,它可以添加或删除内存管理器,一个内存池可以由一个以上的内存管理器进行管理。
“详细信息”框中显示了内存使用的详细信息,主要包括以下信息:
●已使用:当前使用的内存数,包括已经使用的、可获得或未获得的内存;
●分配:分配的内存必须保证Java虚拟机所需要的使用量,提交的内存可能会随时间的改变而改变,Java虚拟机可能会释放系统内存,分配的内存可能会少于最初启动时分配的内存量,分配的内存大于或等于需要使用的内存量。
●最大值:内存管理中可用的最大内存,该值是变化的或不确定的,如果Java虚拟机使用的内存在不断的增长并且大于所分配的内存量,那么分配内存将失败。
●GC时间:累积垃圾收集的时间和总调用的时间,它可能包含多行,其中每行代表一个垃圾收集器算法在Java虚拟机中所消耗的时间。
垃圾收集(GC Garbage Collect)是Java虚拟机如何释放不再被引用的对象所占用的内存的机制,它通常认为的对象,有当前活动的“活着”的对象和无法引用或不获得“死”对象,垃圾收集是由释放“死”对象所占用内存的过程,垃圾收集的算法和参数对性能有很大的影响。
Java HotSpot虚拟机的垃圾收集器使用代GC,代GC的优势大多数都符合以下的概括:
它们创建一些短暂一生的对象,如迭代和局部变量;
它们创建一些长生命的对象,如高层次的持久对象;
代GC分为几代,并给每个指定一个或多个内存池,当一代使用了分配的内存,虚拟机上执行一个局部的GC(也叫minor collection),内存池回收死对象使用的内存,这部分的GC速度通常远远优于一个完整的GC。
Java HotSpot虚拟机定义了两代:年轻代(有时也被称为“托儿所”)和年老代,年轻代包括一个“Eden space”和两个“survivor spaces”,最初,VM将所有的对象在“Eden space”内存池中,并且大多数对象“死”在那里,当它执行了一次局部GC(minor GC),VM将剩余的对象从“Eden space”转移到“survivor spaces”,虚拟长生存时间的对象移动到年老代的“tenured”空间,当年老代填满了,将是一个完整的GC,一个完整的GC往往会很慢,因为它涉及到所有存活的对象,永久代包含虚拟机所有本身数据的反射,如类和方法。
如果垃圾收集器出现瓶颈,那么可以通过自定义代大小来提高性能。
线程信息
线程的监控信息如图10-9所示。

图10-9 线程监控信息
在左下角“线程”列表中显示了所有活动的线程,如果需要查找指定的线程,可以在“过滤器”字段中输入待查找的线程,选中某个线程,右边文本框即会显示出当前线程的名称、状态和堆栈跟踪信息。
上面的线程数目视图中动态的显示当前活动线程数,主要包括两部分内容:当前活动线程数和峰值线程数。
线程监控视图中还提供了一个检测死锁线程的功能,单击【检测到死锁】按钮,如果存在任何线程对象监视器出现死锁情况,则会显示出该死锁线程的ID号,并且会显示出当前线程的相关信息。
在MBean选项卡中可以监视Java虚拟机线程信息的所有属性和操作。
类信息
类的监控信息如图10-10所示。

图10-10 类监控信息
已装入类的数目视图中显示了已装入类的总数和当前加载的类,其实红色表示已装入类的总数,蓝线当前加载的类。详细信息中显示了当前已装入的类、已装入类的总数和已卸载类的总数。
VM摘要信息
VM摘要的监控信息如图10-11所示。

图10-11 VM摘要信息
在VM摘要信息中主要包括五方面的信息:摘要信息、线程和类信息、内存信息、操作系统信息和其它信息。
摘要部分的信息主要包括以下信息:
连接名称:连接监控时的进程PID信息;
运行时间:开始以来Java虚拟机运行的时间总额;
处理CPU时间:Java VM的开始,消耗的CPU时间总量;
编译总时间:累计时间花费在JIT编译所花费的时间;
线程和类信息主要包括以下信息:
活动线程:当前活动的线程;
峰值:最大线程数;
守护线程:即运行在后台的线程;
已启动的线程总数:运行到目前为止共启动的线程数;
当前类已装入:当前正在运行过程中已装载类的总数;
已装入类的总数:运行到目前为止所装载类的总数;
已卸载类的总数:运行到目前为止已卸载类的总数;
内存信息主要包括以下信息:
当前堆大小:当前堆分配的内存空间;
分配的内存:当前已分配的内存大小;
堆大小的最大值:堆分配内存的最大值;
暂挂结束操作:当前暂时挂起结束的对象;
垃圾收集器:垃圾收集器描述了收集器的名称、收集器收集的内存数量和收集这些内存所消费的时间;
操作系统信息主要包括操作系统名、体系结构、分配的虚拟内存、物理内存总量、可用物理内存、交换空间总量和可用交换空间。
其它信息主要包括以下信息:
VM参数:显示通过应用程序传送给Java虚拟机的参数,这些参数不包括的主要方法的参数;
类路径:由系统类加载器用于搜索类文件的类路径;
库路径:加载库时要搜索的路径列表;
引导类路径:引导类加载器搜索类文件的路径列表;
MBean信息
MBeans选项卡显示MBean服务器所注册的MBeans的类,MBeans选项卡允许访问平台MXBean服务器,此外,还可以监控和管理应用程序的MBean,MBean信息如图10-12所示。

图10-12 MBean信息
左侧显示了当前所以运行的MBean,当选中MBean树中某个MBean时,右侧会显示当前被选中MBean的MBeanInfo和描述符信息,在下面会显示当前MBean的相关属性、操作和通知信息。
MBean属性
在MBean树中选择一个MBean,单击“属性”节点,将显示MBean的所有属性,以Memory为例,如图10-13所示。

图10-13 Memory属性
选中属性下面的单个属性,在右侧会显示出当前属性的详细信息,如图10-14所示。

图10-14 属性的详细信息
单击属性值(即右侧黑体字),可以展开详细的属性值信息, HeapMemoryUsage属性展开后的值,如图10-15所示。

图10-15 HeapMemoryUsage详细信息
双击属性值,可以对这些显示的值进行修改,有的属性是以图表的方式显示,如图10-16显示的是Threading中的CurrentThreadUserTime属性值。

图10-16 图表方式显示属性值
Mbean操作
在MBean树中选择一个MBean,单击“操作”节点,将显示MBean的所有相关操作,以Threading为例,如图10-17所示。

图10-17 Threading操作
单击操作调用中的按钮,可以调用这些方法,单击某种方法可以显示当前方法的详细信息,如图10-18所示。

图10-18 方法的详细信息
Mbean通知
在MBean树中选择一个MBean,单击“通知”节点,选择某个通知,右侧将显示该通知的详细信息,以Memory为例,如图10-19所示。

图10-19 通知详细信息
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


相关文章:
性能测试 —— Tomcat监控与调优:Jconsole监控
JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具,JConsole使用Java虚拟机(Java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台,标准版(Java SE平台)6,JConsole的已经更新到目前的外观…...
刷题笔记26——图论二分图判定
世界上的事情,最忌讳的就是个十全十美,你看那天上的月亮,一旦圆满了,马上就要亏厌;树上的果子,一旦熟透了,马上就要坠落。凡事总要稍留欠缺,才能持恒。 ——莫言 visited数组是在如果有环的情况下,防止在图中一直绕圈设置的,类似于剪枝操作,走…...
网站整站优化-网站整站优化工具
您是否曾为您的网站在搜索引擎中的排名而感到焦虑?是否苦苦思考如何提高流量、吸引更多用户? 什么是整站优化。简而言之,它是一项用于提升网站在搜索引擎中排名的策略和技巧。通过对网站的内容、结构、速度等方面进行优化,可以使…...
冲刺十五届蓝桥杯P0001阶乘求和
文章目录 题目描述思路分析代码解析 题目描述 思路分析 阶乘是蓝桥杯中常考的知识。 首先我们需要知道 int 和long的最大值是多少。 我们可以知道19的阶乘就已经超过了long的最大值,所以让我们直接计算202320232023!的阶乘是不现实的。 所以我们需要…...
c++ 学习 之 运算符重载
前言 运算符重载的概念: 对已有的运算符重新进行定义,赋予其另外一种功能,以适应不同的数据类型 加号运算符重载 作用:定义两个自定义的数据类型相加的运算 正常情况下,如果想要实现类中两个int 类型的相加…...
各种数据库表名长度限制整理
因为工作原因,需要整理下系统支持的数据库的表名长度限制,现发出来,以节省大家的整理时间,如有不对的敬请斧正! 数据库类型长度ORACLE 30GreenPlum40KINGBASEES63PostgreSql63Gbase63瀚高63OSCAR64MYSQL 64HBASE64Mar…...
Go 里的超时控制
前言 日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务、网络请求等;一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露、资源不释放等)。 Timer 在 go 中实现超时控制的方法非常简单,…...
一文彻底搞清楚Spark Schema
前言 Spark Schema定义了DataFrame的结构,可以通过对DataFrame对象调用printSchema()方法来获得该结构。Spark SQL提供了StructType和StructField类以编程方式指定架构。 默认情况下,Spark从数据中推断schema,但有时我们可能需要定义自己的schema(列名和数据类型),尤其…...
Nginx多出口IP解决代理端口数量限制,CentOS安装Nginx并开启https2.0
Nginx多出口IP解决代理端口数量限制,CentOS安装Nginx并开启https2.0。 配置文件如下: http {...upstream test {server www.test.com;}server {listen 80 default_server;server_name _;location / {proxy_pass http://test;proxy_bind $split_ip...
SpringBoot项目(百度AI整合)——如何在Springboot中使用语音文件识别 ffmpeg的安装和使用
前言 前言:在实际使用中,经常要参考官方的案例,但有时候因为工具的不一样,比如idea 和 eclipse,普通项目和spring项目等的差别;还有时候因为水平有限,难以在散布于官方的各个文档读懂ÿ…...
探索古彝文AI识别技术:助力中国传统文化的传承与发扬
目录 ⭐️ 写在前面 ⭐️ 一、什么是古彝文 1.1 古彝文介绍 1.2 古彝文与其他古文字示例 1.3 古彝文的重要性 ⭐️二、AI识别技术的挑战与前景 2.1 挑战 2.2 前景 ⭐️三、合合信息AI识别技术 3.1 智能文字识别技术👍👍 3.2 古文识别应用 ⭐…...
mysql面试题2:说一说MySQL的架构设计?一条 MySQL 语句执行的步骤?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说MySQL的架构设计? MySQL的架构设计主要包括以下几个组件: 连接器(Connector):负责与客户端建立连接,并进行身份验证和授权。 查询缓存…...
UPnP协议和SSDP协议
1、两种协议 UPnP协议:Universal Plug and Play,广义的即插即用。UPnP协议的目的:当有新设备连接上网络,网络上的其他设备能够马上知道有新设备加入,然后这些设备能互相宣传和发现彼此,以便能使用和控制彼…...
notepad++配置python2环境
(1)python2版本下载:Index of /ftp/python/2.7.8/https://www.python.org/ftp/python/2.7.8/ (2) 配置notepad环境 1.打开Notepad,点击“插件”-“插件管理器”,在“可用”选项卡中,…...
在ThinkAdmin中弹出层关闭后回调
在thinkadmin里面,窗口的的一些方法全部都集成在admin.js里面,在之前的文章中也有出现过类似的问题,就是对动态加载的数据进行统计,那时候写也是想记录下,现在自己都不记得是哪个站用的了,所以在这里也把这…...
vue3 和vue2 的比较
文章目录 生命周期多根节点Composition API组合式APIOptions API与composition API对比优化逻辑组织优化逻辑复用 异步组件(Suspense)Suspense组件 响应式原理性能体积优化编译优化diff算法优化静态提升数据劫持(响应式系统)优化 生命周期 vue3在组合AP…...
算法通过村第八关-树(深度优先)黄金笔记|寻找祖先
文章目录 前言最近公共祖先问题总结 前言 提示:生活就是一场有很多规则,却没有裁判的比赛。 --约瑟夫布罗茨基《悲伤与理智》 最近公共祖先问题 参考题目地址:236. 二叉树的最近公共祖先 - 力扣(LeetCode) 如果将搜索…...
postgresql|数据库|数据库测试工具pgbench之使用
前言: 数据库是项目中的重要组件,也是一个基础的重要组件,其地位说是第一我想应该是没有什么太多问题的。 那么,数据库的设计这些方面是不用多说的,关键的第一步,主要是涉及数据库的部署方式,…...
代码随想录Day51 | 309.最佳买卖股票时机含冷冻期
309. 买卖股票的最佳时机含冷冻期 class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();if (n 0) return 0;vector<vector<int>> dp(n, vector<int>(4, 0));dp[0][0] - prices[0]; // 持股票for (int i 1; i &l…...
libopenssl 实现私钥加密公钥解密
在需要验证可信来源时,需要用到签名验签。因此,需要使用私钥加密,公钥解密,取得被加密的信息。这就会使用到私钥加密,公钥解密的场景了。 参考: https://github.com/openssl/openssl/issues/20493 https:/…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
