JAVA性能优化工具小记

时间:2023-02-11 11:51:03

好记性不如烂笔头,戊戌年的最后一个工作日,把自己平时在开发过程中使用的一些java性能优化工具做一个简单的小结,

主要包括 jvisualvm、jfr、gdb和查看内存对象信息的几个linux命令。

注:当前系统属性 Mac OS X 10.13.6,jdk版本 1.8.0_151

1:jvisualvm(当前java自带的工具)

JAVA性能优化工具小记

可以看到jvisualvm不仅支持本地应用程序的追踪还支持远程。

然后打开对应的本地项目:

JAVA性能优化工具小记

这里面确实有很多项目的信息,CPU、堆栈信息等。

JAVA性能优化工具小记

我目前使用它就是用它的抽样器,查看当前项目里的对象数及对象占用的内存大小。

JAVA性能优化工具小记

这样对项目中某个对象个数过多或者对象过大,就可以方便的查看到,然后去优化它。

2:JFR

jfr的优点:

VisualVM功能强大,支持图形化界面操作,可以很快定位代码问题。但是它对应用性能的影响也非常大,所以不适合在生产环境下使用。

还有这些软件(比如GDB(下面介绍))要attach到jvm进程上,生产环境一般网络隔离,很难做到。

使用jfr不需要在现有应用上额外添加任何参数、重启进程等,直接在命令行执行即可,实时生效,100%无入侵,且稳定可靠,不影响线上应用运行。

jfr的使用:

2.1:本地使用:

1:需要在项目jvm加上配置 vm options:-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

2:打开jmc

3:打开对应的进程ID,就可以追踪本项目的堆栈、CPU等信息

JAVA性能优化工具小记

2.2:在服务器上使用:

1:由于JFR需要JDK的商业证书,这一步需要解锁jdk的商业特性:

  jcmd <PID> VM.unlock_commercial_features

2:启动jrf,开始输出jfr文件

  jcmd <PID> JFR.start name=test duration=60s filename=/tmp/output.jfr

3:拿到jfr文件后,在本地打开jmc图形化工具后,选择文件直接打开,然后就可以看到服务器上duration时间间隔的项目信息。

当然无论是本地运行还是在服务器上运行,Java飞行记录器都支持创建一个模板。

JAVA性能优化工具小记

在高级模式中,你可以自定义自己想要的信息。

JAVA性能优化工具小记

创建好模板后,无论是在本地还是复制到远程服务器上,

jcmd <PID> JFR.start name=test duration=60s settings=template.jfc filename=/tmp/output.jfr

settings=template.jfc就可以指定使用templayte.jfc这个模板的配置去收集项目信息。

3:GDB(参考文章:https://www.atlassian.com/blog/archives/so-you-want-your-jvms-heap

首先机器上需要安装gdb,gdb的安装就不赘述了,

sudo apt-get install gdb

sudo yum install gdb

brew install gdb

1:使用gdb生成java heap文件

1.1:生成进程core文件

sudo gdb -p <PID>

. . .bunch of info. . .

(gdb)gocre /tmp/jvm.core

  Saved corefile /tmp/jvm.core

(gdb) detach

(gdb) quit

1.2:根据core文件生成java heap文件

sudo jmap -dump:format=b,file=/tmp/jvm.hprof /usr/bin/java (自己机器java路径) /tmp/jvm.core

2:运行MAT找出内存泄漏根源(MAT下载:https://www.eclipse.org/mat/downloads.php

JAVA性能优化工具小记

JAVA性能优化工具小记

点击finish,然后就可以看到当前java进程的堆栈信息。

4:常用的查看java进程堆栈信息命令

JVM学习----查看堆栈信息这篇文章较全面的写了jstat、jmap的详细用法,下面我列举自己常用的一些命令:

每3秒钟输出一次当前进程已使用空间占总空间的百分比

命令:jstat -gcutil <PID>  3000

打印进程堆存活的各个对象个数和所占大小

命令:jmap -histo:live <PID> | more

使用jcmd不加任何参数即可获取jvm进程列表

命令:jcmd

使用jcmd help能够获取某个jvm进程其他可用的诊断命令

命令:jcmd <PID> help

它所列举的commands都是可以使用的。

5:参考文章相关链接:

Java Performance Tuning Guide:http://java-performance.info/

JVM学习----查看堆栈信息:https://blog.csdn.net/eos2009/article/details/78522901

JVM’s heap:https://www.atlassian.com/blog/archives/so-you-want-your-jvms-heap

JAVA性能优化工具小记的更多相关文章

  1. 9个Java性能优化工具汇总

    本文来自blog.idrsolutions.com 1.NetBeans profiler NetBeans Profiler是一个模块化的添加,为NetBeans IDE提供分析功能,它是一个开源的 ...

  2. JVM——九大工具助你玩转Java性能优化

    本文转载自 http://www.importnew.com/12324.html 本文由 ImportNew - 陈 晓舜 翻译自 idrsolutions.欢迎加入翻译小组.转载请参见文章末尾的要 ...

  3. 九大工具助你玩转Java性能优化

    在这篇文章中,我会带着大家一起看一下9个可以帮助我们优化Java性能的工具.有一些我们已经在IDR Solutions中使用了,而另外一些有可能在个人项目中使用. NetBeans Profiler ...

  4. Java性能优化的9大工具

    在这篇文章中,我会带着大家一起看一下9个可以帮助我们优化Java性能的工具.有一些我们已经在IDR Solutions中使用了,而另外一些有可能在个人项目中使用. NetBeans Profiler ...

  5. Java 性能分析工具 &comma; 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  6. 《Java性能优化权威指南》

    <Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...

  7. 推荐:Java性能优化系列集锦

    Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...

  8. Java 性能优化的五大技巧

    要对你的 Java 代码进行优化,需要理解 Java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的.使用下面这五个技巧和资源,开始学习如何分析和优化你的代码吧. 在我们开始之前, ...

  9. 【转】10种简单的Java性能优化

    10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...

随机推荐

  1. &period;net的垃圾回收机制简述

    .如何理解.net中的垃圾回收机制. .NET Framework 的垃圾回收器管理应用程序的内存分配和释放.每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存.只要托管堆中有地址 ...

  2. &lbrack;knowledge&rsqb;&lbrack;basic&rsqb;&lbrack;hardware&rsqb; 内存的硬件结构(转)

    写的并不太易懂,但概念性的科普已足够. 原文地址:http://blog.csdn.net/miaomao1989/article/details/51508195 Memory中的Channel/R ...

  3. 基于Open vSwitch搭建虚拟路由器

    As part of my work in OpenDaylight, we are looking at creating a router using Open vSwitch... Why? W ...

  4. &lbrack;转载&rsqb;115个Java面试题和答案

    不知道大家有没有这样的体会,就是找工作的时候不得不准备大量面试题,而工作的时间长了面试题里的精髓却忘的差不多了... 转载几篇Java面试的bolg,温故而知新,最重要的是常来看看. 1. http: ...

  5. 简单使用zabbix监控nginx是否存活

    1.在agent端修改主配置文件 vim /etc/zabbix/zabbix_agentd.conf ........ ........ UserParameter=nginx.status[*], ...

  6. python中面向对象元类的自定义用法

    面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...

  7. C语言操作Redis总结

    #include "hiredis.h" #define NO_QFORKIMPL #pragma comment(lib,"hiredis.lib") #pr ...

  8. 使用gm和imageMagick处理图片

    第一步安装imageMagick和gm模块 1, cnpm install --save imageMagick gm 第二步在服务器上安装imageMagick,下载地址http://www.ima ...

  9. Java数据结构和算法(三)顺序存储的树结构

    Java数据结构和算法(三)顺序存储的树结构 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preO ...

  10. 【Tomcat】使用记录

    同时绑定ipv4和ipv6 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout=&q ...