JVM性能调优指南(一)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM性能调优指南(一)相关的知识,希望对你有一定的参考价值。

参考技术A -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

以上是关于JVM性能调优指南(一)的主要内容,如果未能解决你的问题,请参考以下文章

JVM性能调优监控工具专题一:JVM自带性能调优工具

JVM性能调优

Spark性能调优篇七之JVM相关参数调整

JVM性能调优1:JVM性能调优理论及实践(收集整理)

JVM常用调优参数 ——JVM篇

JVM性能优化入门指南