欢迎光临散文网 会员登陆 & 注册

聊一聊JVM性能调优

2023-07-22 17:29 作者:懒人Java屈原  | 我要投稿

我的程序需要JVM性能调优吗?

如果JVM频繁fullGC,时停过长,出现outOfMemeory,系统响应与吞吐量不高,就该考虑JVM性能调优。

满足下面的情况,一般不需要调优

1.Minor GC 执行时间不到 50ms;

2.Minor GC 执行不频繁,约 10 秒一次;

3.Full GC 执行时间不到 1s;

4.Full GC 执行频率不算频繁,不低于 10 分钟 1 次;

我要从哪方面进行性能调优

为了提升系统的性能,我们需要从各个层面去优化,除了JVM调优,还可以从其他层面优化。优先考虑从代码层面与数据库层面进行优化。

JVM调优的统一标准是什么

很抱歉,没有这玩意。JVM性能调优取决于你的实际系统情况,不是网上随便拷贝的一个性能参数,然后跑起来就行。JVM调优需要你先记录目前的系统相应参数、然后调整JVM的参数,然后再压测。比较上一次的结果,看看是否达到预期目标。一遍遍的比较与调整,非常繁琐。

阿里JVM性能调优建议

JVM性能调优目的主要是为了优化垃圾回收器,从而使得我们运行程序时,使用更少的内存与更低的延迟,却能会得到更大的吞吐量。

性能参数指标

JVM调优原则

JVM性能调优参照流程图

常用JVM性能调优参数

常用性能调优工具

1.命令行工具jps

jps -q 输出pid

jps -l: 输出应用程序主类完整 package 名称或 jar 完整名称.

jps -v: 列出 jvm 参数

jps -m 显示main方法启动时的传入参数


2.命令行工具jstat

jstat -class pid:统计class数量、内存空间,耗时

jstat -compiler pid:统计编译成功、失败的数量等信息

jstat -gc pid:垃圾回收统计

jstat -gccapacity pid:垃圾回收器内存空间统计

jstat -gcmetacapacity pid:元数据内存空间统计

jstat -gcnew pid:新生代垃圾回收统计

jstat -gcnewcapacity pid:新生代内存空间统计

jstat -gcold pid:老年代垃圾回收统计

jstat -gcoldcapacity pid:老年代内存空间统计

jstat -gcutil pid:总垃圾回收统计

jstat -printcompilation pid:JVM编译方法统计


3.命令行工具jinfo

jinfo -sysprops pid :可以查看由 System.getProperties()取得的参数

jinfo -flags pid:查看曾经操作过的一些参数

jinfo -flag name pid:查看某个具体属性的值,如jinfo -flag MaxHeapSize 65535

jinfo –flag -[参数] pid 可以修改参数:如jinfo -flag +PrintGC 63535


4.命令行工具jmap

jmap pid:查看进程的内存映像信息

jmap -heap pid:显示Java堆详细信息

jmap -histo:live pid:显示堆中对象的统计信息

jmap -clstats pid:打印类加载器信息

jmap -finalizerinfo pid:打印等待终结的对象信息

jmap -dump:format=b,file=heapdump.phrof pid:用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。jmap 的作用并不仅仅是为了获取 dump 文件,它还可以查询 finalize 执行队列、Java 堆的详细信息,如空间使用率、当前用的是哪种收集器等。例子:jmap -dump:format=b,file=/opt/1.hprof 12023

Sun JDK 提供 jhat(JVM Heap Analysis Tool)命令与 jmap 搭配使用,来分析 jmap 生成的堆转储快照。

5.命令行工具jstack

用于生成当前时刻的线程快照,

jstack pid:打印堆栈信息到控制台

jstack -F pid:当正常输出的请求不被响应时,强制输出线程堆栈

jstack -m pid: 如果调用到本地方法的话,可以显示C/C++的堆栈

jstack -l pid: 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

6.可视化工具Jconsole

可以非常直观的考到线程与内存的情况

7.可视化工具visualvm

8.Jmeter压测工具

1.本地下载地址

jmeter.apache.org/downl

2.插件管理器下载

JMeter-Plugins.org

3.创建线程组

线程数:并发线程数

Ramp-Up时间:表示启动所有线程需要的时间

循环次数:每个线程要发送多少次请求。

调度器:循环次数与调度器选择一个进行配置即可,持续时间填个60,就代表1分钟

4.创建HTTP请求

5.创建监听器,输出结果

性能调优总结

上线前,可以通过Jmeter进行压测,然后进行性能调优。上线后,通过JDK自带的这些性能调优工具,进行监测后续情况。性能调优没有捷径,也没有统一的参数,只能自己设置参数后,使用压测工具与监测工具,一遍遍查看效果。


聊一聊JVM性能调优的评论 (共 条)

分享到微博请遵守国家法律