JVM性能调优指南(一)

2023-06-30

本文主要是 JVM性能调优指南(一) 相关的知识问答,如果你也了解,请帮忙补充。

参考知识1 -help
-server -client
-version -showversion
-cp -classpath

调整为 完全解释执行 编译模式:

调整为 编译执行 编译模式:

最后一行的 mixed mode 表明JVM默认使用的编译模式是 混合模式

使用最多的一种参数类型

格式: -XX:[+/-] <name> 表示启用或者禁用name属性
比如:
-XX:+UseConcMarkSweepGC 表示启用CMS垃圾回收器
-XX:+UseG1GC 表示启用G1垃圾回收器

格式: -XX:<name> = <value> 表示name属性的值为value
比如:
-XX:MaxGCPauseMillis=500 表示GC最大停顿时间是500毫秒
-XX:GCTimeRatio=19 表示...

虽然1以X开头,但是不是X类型参数,而是XX类型的参数

如查看JVM版本信息: java -XX:+PrintFlagsFinal -version > ~/version.txt

注: = 表示默认值, =: 表示修改后的值

关于jps等命令的详解,可参考此文档 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html

如查看一个java进程id为9723的tomcat服务最大堆内存大小

查看一个进程的所有运行时参数:

Non-default VM flags 表示手动赋值过的参数,其中有些是tomcat设置的
Command line :与 Non-default VM flags

查看垃圾回收器信息

格式: jstat -class 进程id 每隔多少毫秒 一共输出多少次
如:查看一个进程id为29159的java进程,每隔1s输出,一共输出10次

要查看一个java进程的垃圾收集器信息,可使用 jstat -gc 进程id 每隔多少毫秒 一共输出多少次

S0C : Current survivor space 0 capacity (kB). 表示survivor 0区的总大小
S1C : Current survivor space 1 capacity (kB). 表示survivor 1区的总大小
S0U : Survivor space 0 utilization (kB). 表示survivor 0区使用了的大小
S1U : Survivor space 1 utilization (kB). 表示survivor 1区使用了的大小
EC : Current eden space capacity (kB). 表示eden区总大小
EU : Eden space utilization (kB). 表示eden区使用了的大小
OC : Current old space capacity (kB). 表示old区总大小
OU : Old space utilization (kB). 表示old区使用了的大小
MC : Metaspace capacity (kB). 表示Metaspace区总大小
MU : Metacspace utilization (kB). 表示Metaspace区使用了的大小
CCSC : Compressed class space capacity (kB). 表示压缩类空间总量
CCSU : Compressed class space used (kB). 表示压缩类空间使用量
YGC : Number of young generation garbage collection events. 表示Young GC的次数
YGCT : Young generation garbage collection time. 表示Young GC的时间
FGC : Number of full GC events. 表示full GC的次数
FGCT : Full garbage collection time. 表示full GC的时间
GCT : Total garbage collection time. 表示总的 GC的时间

模拟内存溢出:

设置启动参数:

启动application,发现出现内存溢出

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./

格式: jmap -dump:format=b,file=路径/heap.hprof 进程id
其他命令: jmap -heap 进程id 查看堆信息

右键查看com.imooc.monitor_tuning.chapter2.User的强引用

也可以查看对象树:

格式: jstack 进程id

访问/loop端点三次,然后使用top命令:

然后在导出的7930.txt文件中找到2037

访问/loop端点,制造死循环,使用jstack命令导出线程堆栈信息:

最后一行已提示:Found 1 deadlock

相关资料:
jdk8工具集
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html
Troubleshooting
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/
jps
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html
jinfo
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html
jstat
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
jmap:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html
mat:
http://www.eclipse.org/mat/downloads.php
jstack:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html
java线程的状态
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr034.html
java线程状态转化:
https://mp.weixin.qq.com/s/GsxeFM7QWuR--Kbpb7At2w
死循环导致CPU负载高
https://blog.csdn.net/goldenfish1919/article/details/8755378
正则表达式导致死循环:
https://blog.csdn.net/goldenfish1919/article/details/49123787
相似知识
ElasticSearch性能优化实践(JVM调优+ES调优) 参考知识1近一年内对公司的ELK日志系统做过性能优化,也对SkyWalking使用的ES存储进行过性能优化,在此做一些总结。本篇主要是讲ES在ELK架构中作为日志存储时的性能优化方案。随着接入ELK的
Spark性能调优篇七之JVM相关参数调整 参考知识1        由于Spark程序是运行在JVM基础之上的,所以我们这一篇来讨论一下关于JVM的一些优化操作。
JVM性能调优-G1 参考知识1本篇是对Java官网G1收集器调优的精简版。针对G1垃圾的收集阶段可能出现的问题,非合理内存分配,大对象占用,FullGC等问题作出解决方式和操作参数。G1是一个吞吐量和时间延迟之间相互平衡
JVM性能调优(2) —— 内存设置和查看GC日志 参考知识11)JVM内存分配有如下一些参数:一般-Xms和-Xmx设置一样的大小,-XX:MetaspaceSize和-XX:MaxMetaspaceSize设置一样的大小。-Xms等价于-XX:In
Flink性能调优(一) 参考知识1Flink是依赖内存计算,计算过程中内存不够对Flink的执行效率影响很大。可以通过监控GC(GarbageCollection),评估内存使用及剩余情况来判断内存是否变成性能瓶颈,并根据情
什么时候才用的到jvm调优,为什么要调优,有人能指教一下吗 JVM是最好的软件工程之一,它为Java提供了坚实的基础,许多流行语言如Kotlin、Scala、Clojure、Groovy都使用JVM作为运行基础。一个专业的Java工程师必须要了解并掌握JVM,
北大青鸟设计培训:简单的Java性能调优技巧? 参考知识1  大多数JAVA开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识。好吧,不能说这是完全错误的。  优化应用程序以获得最佳性能不是一件容易的
Tomcat 性能调优 参考知识1默认的模式,性能非常低下,没有经过任何优化处理和支持.一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。nio(newI