JDK里面自带了这么多的exe

话说面试这块,JVM算是一个经典的也是三年必问的知识点了,而且这个知识点算是最重要的一个知识点,你如果会这个内容,那么对你的在之后的面试中,能够喊出一个不错的价格。

而关于JVM和还有关于垃圾回收算法的解析,阿粉在这里就不在给大家进行讲解了。大家有兴趣的可以看一下阿粉之前推出的这几篇文章

性能监控工具

我们都在最开始学Java的时候,安装过Java,不管是直接安装版本还是复制过来解压好的,大家都可以在JDK的安装目录中找到一些exe的程序,而这些exe的程序里面,有很多是我们不怎么去关注的性能的监控工具。

大家可以看一下里面这些exe,是不是感觉Sun公司有时候也是很给力的,各种给大家隐藏的福利,就比如下面我们要说的JVM的调优工具,就是Jconsole,而还有一些比如说

jstack :显示虚拟机的线程快照

jps :虚拟机进程状况工具

JConsole :JMX的可视化管理工具

VisualVM :多合一故障管理工具 (阿粉认为最牛掰的工具)

关于使用,我们在下面开始一一的讲述,先从我们最关心的JVM调优开始。

JVM调优工具

主要的调优工具有JDK自己带的工具,也有外部的属于收费的,大致就这么几种。Jconsole,jProfile,VisualVM。

  • Jconsole :jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。
  • JProfiler :这就是需要你另外付费的了的商业软件,功能强大(付钱付钱)。
  • VisualVM :JDK自带,功能强大,与JProfiler类似。

而就因为阿粉不知道这么几个工具而且没使用过这些工具,被公司老弟疯狂嘲笑了一波,那叫一个悲惨,既然不知道那么阿粉一定要学习一波的呀,那么我们就来看看这个工具。

那收费的我就管了,反正不如白嫖的香。那我们就来看看 Jconsole和 VisualVM吧。

VisualVM:


大家可以看一下左边,显示的是你正在运行的程序,pid是15908,端口号是我这边的,你们那边必然不是,但是大家可以当个参考嘛。

VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。

比如说看下图:

这里你如果不显示的话,直接点那个检查最新版本。在可用的插件里面就会显示出我们所有的能用的插件来。

我们双击一个内容进去看一下:

在这里我们可以监控各种堆栈信息,而这个工具和Jconsole是我们大家经常使用的吧,除了有些高大上的喜欢用第三方的,但是阿粉还没怎么使用过,毕竟公司不大,没有那么多事,能看出问题来并且解决就OK啦。

下面我们再来看看JConsole。

JConsole :一款JMX的可视化管理工具

它是一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。

在我们看到的进程信息随便点一个进去就可以看到

里面也有和VisualVm一样的内容,比如说堆内存的使用量;内存池“PS Old Gen”

而且还有我们的类的路径,库的路径,以及Vm的参数等等,都是非常不错的。

jps(JavaVirtual Machine Process Status Tool):虚拟机进程状况工具

说实话,阿粉从安装JDK以来,还真的是没有太注意这个jps,毕竟他仅仅是来输出JVM中运行的进程状态信息.

语法说实在的也是非常简单的,给大家安利一下:jps 【options】 【hostid 】

options中可以选择有很多种比如说

  • q :不输出类名、Jar名和传入main方法的参数,仅输出VM标识符
  • m :输出传入main方法的参数
  • l :输出完全的包名,应用主类名,jar的完全路径名
  • v :输出jvm参数

而后免得hostid更好说了,主机或者是服务器的id,你如果什么东西都不写,那么就是默认的喽。

如下所示:

大家有兴趣的可以去自己动手试试,很有意思的。

jstack :堆栈跟踪工具

这个工具也是非常好的,我们给他一个java进程ID,那么它就会给我们打印出Java堆栈信息。

而他的语法也是非常简单的:jstack 【-l】 pid

这个说实话阿粉就更喜欢VisualVM了,同样也能看到堆栈信息,至于怎么选择,那就看你们的需要什么了?

相关文章

达内java培训专家:如何理解Java堆栈?

堆栈的概念是逻辑上,在完全符合Java规范的Java处理器面世之前,所有Java虚拟机提供的内容都是由软件模拟出来的。本文达内java培训(java.tedu.cn)专家就为大家详细解读一下Java堆...

Java堆与栈的核心差异与代码实践

1.内存分配机制栈存储局部变量和对象的引用变量。每个线程独占一个栈,方法调用时自动分配内存,方法结束自动释放代码示例:void method() { int a = 10; //...

java的jstack如何使用?(一)

一、介绍jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-...

常见的Java性能问题,我来手把手教你定位!

推荐学习春招指南之“性能调优”:MySQL+Tomcat+JVM,还怕面试官的轰炸?这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer概述性能优化一向是后端服务优化的重点,但是线上性...

JVM入门教程第11讲:JVM参数之堆栈空间配置

JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError。因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要。tips:...

一个简单示例带你快速入门 Java 线程 dump 分析

一、背景Java 应用怎么通过方法定位到代码的具体步骤,下面通过一个具体的例子来说明。二、分析步骤使用 TOP 命令找到谁在消耗 CPU 比较高的进程,例如:pid = 1232使用 top -p 1...