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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具JConsole使用Java虚拟机(Java VM)提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台标准版(Java SE平台)6JConsole的已经更新到目前的外观类似于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服务器此外还可以监控和管理应用程序的MBeanMBean信息如图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所示

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Tomcat

“性能测试 —— Tomcat监控与调优:Jconsole监控” 的相关文章