8款JVM性能调优监控工具(提高开发效率)

在平时的开发当中我们总是会遇到各种各样的问题,比如说内存泄漏、死锁、CPU等。遇到问题不可怕,关键是我们如何去排查这些错误,对症下药才是根本。不过对于很多人来说,往往找不到这些问题的根本所在,因此这篇文章主要是让我们掌握一些工具来分析到底是哪里出现了问题。

在之前的文章中,主要是分析了JVM的内存结构、类加载机制和垃圾回收机制。文章的顺序也是循序渐进的,从这篇文章当中我们主要是分析JDK自带的工具,把理论应用于实践。

首先我们先对几种要讲的工具进行一个概述,然后再分别分析:

一、性能监控工具概述

工具主要是为了解决问题而生的,就是由于我们的程序存在着一些性能问题,才有了这些工具。其实当我们在下载完成JDK之后,那些工具就被SUN公司随之送给我们了。

我们可以在我们的JDK安装目录,下看看会有很多这样的工具。

在这里插入图片描述

我们会发现很多这样的exe文件,这里面有很多都是性能监控工具。我们就抽出来几个进行讲解。

img

常见的几个工具都已经列出来了,还有一些其他的工具,其实用起来比JDK自带的还要好,我会在今后的文章中列出来。OK,我们就一个一个去分析一下这些工具是干嘛的,以及如何去使用的。

二、工具

1、jps:虚拟机进程状况工具

jps主要用来输出JVM中运行的进程状态信息。语法格式如下:

jps [options] [hostid]

第一个参数:options

-q 不输出类名、Jar名和传入main方法的参数-m 输出传入main方法的参数-l 输出main类或Jar的全限名-v 输出传入JVM的参数

第二个参数:hostid

主机或者是服务器的id,如果不指定,就默认为当前的主机或者是服务器。

我是在Windows10系统下测试的,当然你可以在linux下试验,方式是一样的,结果可能有不同。你可以选择不同的参数选项来进行测试。打开CMD输入相应命令

在这里插入图片描述

2、jstack:堆栈跟踪工具

jstack用于生成虚拟机当前时刻的线程快照。语法格式如下:

jstack [option] vmid

第一个参数:option

img

第二个参数:vmid

vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。

我们直接在CMD中操作一下:

在这里插入图片描述

3、jstat:虚拟机统计信息监控工具

jstat监视虚拟机各种运行状态信息,可以显示本地或者是远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。语法格式如下:

jstat [ generalOption | outputOptions vmid [interval] [count]] ]

第一个参数:generalOption | outputOptions

这个参数表示的option,代表着用户希望查询的虚拟机信息,分为类加载、垃圾收集、运行期编译状况3类。

img

第二个参数:vmid

vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。

第三个参数:interval

interval是采样时间间隔,

第四个参数:count

count表示的是采样数。

下面我们就是用一下这个工具,打开我们的CMD,输入相应的命令:

img

4、jinfo:实时地查看和调整虚拟机各项参数

命令格式:

jinfo [option] pid

第一个参数:option

img

第二个参数:pid

指定显示的进程id。

在CMD中进行测试:

在这里插入图片描述

5、jmap:生成虚拟机的内存转储快照(heapdump文件)

jmap(Memory Map for Java,内存映像工具),用于生成堆转存的快照,一般是heapdump或者dump文件。如果不适用jmap命令,可以使用-XX:+HeapDumpOnOutOfMemoryError参数,当虚拟机发生内存溢出的时候可以产生快照。或者使用kill -3 pid也可以产生。jmap的作用并不仅仅是为了获取dump文件,它可以查询finalize执行队列,java堆和永久代的详细信息,如空间使用率,当前用的哪种收集器。命令格式如下:

jmap [option] vmid

第一个参数:

img

第二个参数:vmid

vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID.

在cmd中测试:

在这里插入图片描述

6、jhat:分析内存转储快照,不推荐使用,而且慢

由于这个工具功能比较简陋,运行起来也比较耗时,所以这个工具不推荐使用,推荐使用MAT。

7、JConsole:JMX的可视化管理工具

这个工具相比较前面几个工具,使用率比较高,很重要。它是一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。

在cmd里面输入 jconsole,选则进程就可以了。(前提是在IDE工具先建立一个线程运行着)

img

然后我们选择了相应的选项之后,进入这个工具就会出现下面这个界面

img

在上面有菜单,我们可以选择其中一个进行查看,就可以了,这个用具用起来很方便,也是我之前用的比较多的工具。

8、VisualVM:多合一故障管理工具

这个工具也很牛bility。它同jconsole都是一个基于图形化界面的、可以查看本地及远程的JAVA GUI监控工具,Jvisualvm同jconsole的使用方式一样,直接在命令行打入jvisualvm即可启动,jvisualvm界面更美观一些,数据更实时:

img

最上面也有菜单,你可以选择不同的选项来展示。自己动手试一遍是最好的。

三、总结

这些工具就先写这么多,在文章一开始我们其实已经发现了,jdk自带的工具那是超级的多,而且随着jdk版本的不断更新,工具还有不断加强增多的趋势,想要每一个都掌握那太费时间了,我们遇到哪些问题去搜索一下,看看能用到哪些工具就可以了,列出的这几种工具,对于初学者来说还是比较适用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux的静态编译elf无法调试,[翻译]自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie@15PB...

自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie15PB在上一节中,你已经听说了DWARF调试格式,它是程序的调试信息,是一种可以更好理解源码的方式,而不只是解析程序。今天我们将讨论源代码级调试信息的细…

SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题

SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题 当你开开心心搭建了一个SpringBoot项目,用插件生成了entity、dao、mapper,写下第一个Controller准备试一下,结果却发现一条简单的查询报错了。 {"timestamp…

Java中switch参数传null会引起异常——Java 语法糖

问题 switch 参数不能是null,swicth(null)会报java.lang.NullPointerException异常 查找原因 为什么会这样呢,查找一下原因: 找到编译后的class文件,就明白了 总结: switch 是一个语法糖。switch语句是先计算 par…

linux head命令作用,Linux查看文件内容之head命令

1. head命令简介本文主要介绍head命令的作用与常用使用方法,该命令和tail命令相反,head默认显示用来显示文本开头,而tail默认显示结尾某个数量的文字区块。2. head命令选项-q 隐藏文件名-v 显示文件名-c 显示字节数-n 显示的行数3. 常见使用方…

SpringBoot使用jasypt加解密密码

在我们的服务中不可避免的需要使用到一些秘钥(数据库、redis等);使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。打开application.properties或application.yml&…

android 写字体投影,android-给字体设置投影

1,在代码中添加文字阴影TextView 有一个方法/*** Gives the text a shadow of the specified radius and color, the specified* distance from its normal position.** attr ref android.R.styleable#TextView_shadowColor* attr ref android.R.styleable#TextView…

android 开源图表动画,Android 图表开发开源库MPAndroidChart-Go语言中文社区

上面是APP中实现的效果图(点击可以放大查看)图1的效果不是用这个实现的,如果感兴趣可以参考我这篇文章 Android渐变圆环总体来说,MPAndroidChart可能是目前Android 开发最好用的一个三方库了,功能非常强大,集成简单。直接导入作为…

电脑开启防火墙后ping不通 及 开启防火墙后,不能远程的解决办法

有些情况下电脑需要开防火墙但是又希望能被远程或者ping通。 一、先查看电脑的网络类型(第二步中打开对应网络类型下的协议) 二、控制面板 - Windows防火墙 - 高级设置-入站规则 (1)开启防火墙后,能ping通设置。 &…

android 时间应用程序,Android在首次启动时需要更多时间启动应用程序

在我的项目中,我使用了需要multidex支持的库。 根据我的研究,我发现它会导致应用启动时出现延迟。我在gradle中启用了multidexfunction。 defaultConfig {multiDexEnabled true}我曾经为kitkat设备获得NoClassDefFound Exception,所以我添加了…

Mysql中用between...and...查询日期时注意事项

select count(1) from user where regist_date between 2017-07-25 00:00:00 and 2017-07-25 24:00:00;这条sql语句查询出结果为0。实际上数据库有一条符合该查询条件的数据。 错误原因:2017-07-25 24:00:00 晚上24点即为下一天00点 2017-07-26 00:00:00&#xff0…

android core log,Android 日志系统(Logcat)的实现分析

这篇说一下Android 日志系统的实现:1. Android中的打印分为4个缓冲区和6个打印等级,在frameworks\base\core\java\android\util\Log.java中有定义:四缓冲:public static final int LOG_ID_MAIN 0;public static final int LOG_ID…

android矢量图 内存大,Android内存控制小技巧-使用矢量图来节省你的内存并简化你的开发。...

先上一个 位图和矢量图的 说明。外链网址已屏蔽维基百科里面有更详细的说明 我就不贴地址了。简单来说就是位图 比 矢量图要大。但是位图可以适用于各种场景。但是矢量图就只能显示一些有规律的图形。复杂的做不了或者是很难做。对于android来说,我们一般app里面 会…

idea 快捷键代码行标记并快捷跳到标记行

idea有一个组合快捷键 标记代码行(左边的行数会出现一个1,代表着已经标记了) ctrlshift1 迅速跳到标记行 ctrl1 这边给大家送上显示GIF

鸿蒙之火是什么意思,鸿蒙突然火了!鸿蒙是什么?

原标题:"鸿蒙"突然火了!"鸿蒙"是什么?什么是鸿蒙?鸿蒙是什么?很多人都在发问,仿佛一夜之间就火了的鸿蒙有何独特之处?鸿蒙是真的来了。鸿蒙是文化,鸿蒙也是科技…

String类的indexOf方法的用法和举例

String类的indexof方法的作用和返回值: 今天在这里重点回顾一下,希望对大家能有所帮助: indexOf(int,ch) 先看第一个indexOf它返回值是int,在看它的参数(int,ch&#x…

Java字符串池(String Pool)深度解析

在工作中,String类是我们使用频率非常高的一种对象类型。JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,这就是我们今天要讨论的核心,即字符串池(String Pool&#xff0…

用dl元素编辑html个人信息,html dl dt dd标签元素语法结构与使用

dl dt dd认识及dl dt dd使用方法一、dl dt dd认识 - TOPhtml 是一组合标签,使用了dt dd最外层就必须使用dl包裹,此组合标签我们也又叫表格标签,与table表格类似组合标签,故名我们也叫dl表格(扩展阅读:table tr td、…

千牛怎么注销卖家店铺_新店铺怎么拥有亚马逊购物车?亚马逊小卖家如何尽快获得黄金购物车?...

我做跨境电商也有六年的时间了,在电商这个行业也有自己的一些经验。经验也许没有其他大卖家丰富,但会将我知道的都进行分享。如果有不懂得亚马逊问题可以我(V:772024802)。我这里给大家安排一堂直播课,可以系统的帮你解决做亚马逊…

mysql中like是否使用索引

一.测试数据 CREATE TABLE test_orderdetail (id int(11) NOT NULL AUTO_INCREMENT,order_id int(11) DEFAULT NULL,product_name varchar(100) DEFAULT NULL,cnt int(11) DEFAULT NULL,create_date datetime DEFAULT NULL,PRIMARY KEY (id),KEY idx_orderid_productname (pro…

电子科大16秋计算机应用基础在线作业一,电子科大16秋《计算机应用基础(本科)》在线作业3...

电子科技大学电子科大16秋《计算机应用基础(本科)》在线作业3一、单选题(共35 道试题,共70 分。)1. 在Windows,打开一个菜单后,其中某菜单项会出现下属级联菜单的标识是()。A. 菜单右侧有一组英文提示B. 菜单右侧有一个黑色三角形C. 菜单左侧有一个黑色圆点D. 菜单左…