likes
comments
collection
share

初识性能调优【第三篇】之JVM调优说明

作者站长头像
站长
· 阅读数 14

本文源自Recently祝祝,创自Recently祝祝。转载请标注出处。

此解决方式在企业中有所应用,适合Java初级开发学习,参考。

本文字数与行数,耐心阅读必有收获

初识性能调优【第三篇】之JVM调优说明 JVM调优会用到一系列的工具,以及参数的配置,参数有:标准参数(咱们常用的参数,例如:java -v),非标准参数(-X开头的参数,例如设置堆最小值 -Xms 4089),不稳定参数(—XX开头)。在调优的时候需要合理的使用一些工具,来查看JVM的性能瓶颈,查看JVM的内存相关数据,做出调优判断,第三方工具列举:GCEasy,MAT,GCViewer,Arthas

1.实用工具列举

第三方工具列举:GCEasy,MAT,GCViewer,Arthas。

对于我个人而言,比较喜欢可视化界面的工具,当然linux命令行也可以查看相关数据,但是图形可视化可以更直观的显示数据,但是第三方工具有个缺点就是,部分数据不是完全正确的,也不能完全依赖第三方工具

1)GCEasy

最简单的第三方图形化展示工具,但是首先你需要拿到GC.log日志,拿到日志后,进入网站gceasy网站主页。然后选择文件,上传日志文件,点击Analyze。然后经过网站解析,就能得到直观的图形化数据界面了.

初识性能调优【第三篇】之JVM调优说明 分析之后界面

初识性能调优【第三篇】之JVM调优说明

2)MAT

MAT是eclipse下的一款工具,需要到官网下载,MAT官网,下载好之后解压,然后双击exe文件打开

初识性能调优【第三篇】之JVM调优说明 打开之后,点击file,然后打开Dump文件。注意这里跟GCeasy不一样,这里使用的是Dump文件。

Dump文件可以从JvisualVM下载

初识性能调优【第三篇】之JVM调优说明

也可以在服务器上使用命令jmap -dump:format=b,file=heapdump.hprof pid下载,其中这个jmap是你安装的java目录bin包下的jmap文件

初识性能调优【第三篇】之JVM调优说明 打开Dump之后,软件会自动分析,也会显示出一些问题,但是这个问题的可能不太正确,但是可以作为参考

初识性能调优【第三篇】之JVM调优说明 一般通过分析直方图跟支配树的方式,查找是否内存溢出,内存泄露,并且减少内存消耗,观察对象回收后释放空间的带下以及线程栈的大小

初识性能调优【第三篇】之JVM调优说明

3)GCViewer

开源分析工具,在JDK1.7之后,JDK包中自带,只需要双击就能打开,里边可以查看到正在运行的项目进程线程等 初识性能调优【第三篇】之JVM调优说明

4)Arthas

这个是一个在服务器使用的工具,需要进行下载并且启动

# 下载arthas-boot.jar
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
# 启动
java -jar arthas-boot.jar

启动成功会显示进程,因为我只启动了一个项目,所以进程是1

初识性能调优【第三篇】之JVM调优说明 emo进程是第1个,则输入1,再输入回车/enter。Arthas会attach到目标进程上,并输出日志:

初识性能调优【第三篇】之JVM调优说明

然后使用Arthas命令进行数据查看,命令可以在官网上查找,官网MarkDown说明文

最后Exit可以退出Arthas来到用户目录下边。

2.基本参数说明

JVM参数有三种:标准参数、非标准参数、不稳定参数

JVM参数一般不用调整就可以满足需求,但是在系统性能测试以及需要获取一些信息的时候通常会修改参数

1)标准参数

标准参数,功能和输出结果都很稳定,不会根据JDK版本变化,标准参数也是我们很常见的参数,可以通过命令查看

初识性能调优【第三篇】之JVM调优说明 那种-开头的就是参数了,但是可能是我操作系统语言的问题,所以显示的是英文,一般可以显示中文,但是作为一个开发,需要适应英文环境,要有一定的英文基础,这些英文的解释还是需要看懂的。

2)非标准参数

—X,开头的,标准参数的扩展。参数数据可能会随着JDK版本变化,但是也不一定,可以通过java -X查看

初识性能调优【第三篇】之JVM调优说明 参数不多,一个界面就能看完

3)不稳定参数

不稳定参数隶属于非标准化参数,通常用于JVM调优使用。

常用不稳定参数列举:

初识性能调优【第三篇】之JVM调优说明

不稳定参数可以分为三类:性能参数、行为参数、调试参数。根据自己的需求进行设定

3.JVM调优基本知识点

1)为什么要进行JVM调优

提高JVM利用率,不增加硬件的基础上,最小的硬件获取最大的吞吐。

2)什么时候需要进行JVM调优

系统性能降低的时候,就是进行JVM调优的性能点。

  1. 系统吞吐量下降的时候性能调优提高吞吐量
  2. 响应延迟升高的时候:降低响应延迟
  3. 内存溢出的时候,可以通过命令查看
  4. 垃圾回收次数较多的时候,可以通过可视化界面查看

JVM调优:内存分配跟垃圾回收两大重点。但是一般如果架构跟代码能处理的优化,都不需要调JVM,一般情况下也是不调JVM的

3)调优整合步骤

通过以上说明可以看出

  1. 第一步:监控GC日志,想要确定瓶颈就必须分析日志,日志的监控通过命令行,或者可视化界面监控,同时可以根据需求,设置监控时间
  2. 第二步:判断JVM的问题,不是JVM问题这不需要调JVM,检查JVM参数、GC频率、耗时、是否出现频繁GC
  3. 第三步:确定调优部分,制定方案
  4. 第四步:调整参数,满足内存需求,吞吐量要求
  5. 第五步:对比调优前后差距
  6. 第六步:重复以上步骤,找出最优调节方案,这个阶段比较耗时,但是事半功倍。
  7. 第七步:应用JVM参数到应用服务器,找到最适用的参数,部署发布。

文章全为个人理解,如果发现部分跟你所知道的有出入,欢迎在评论区指出,欢迎探讨。