jpskb下载(jptt下载)

我们来谈谈JVM参数和调优。正如JDK的命令工具之前所说,我们今天来试一个程序,看看如何调优,从哪些方面调优。(一)调音的基本概念① 介绍记住:没有必要调优JV

我们来谈谈JVM参数和调优。正如JDK的命令工具之前所说,我们今天来试一个程序,看看如何调优,从哪些方面调优。

jpskb下载(jptt下载)插图

(一)调音的基本概念

① 介绍

记住:没有必要调优JVM。不要鬼混。这是一件忌讳的事情。毕竟JVM是一个非常成熟的产品。

② 在调整性能时,JVM有三个组件堆大小调整(内存最够大的话,尽量搞大点)垃圾收集器调整JIT 编译器(比较深,需要掌握源码才能更好的优化更加底层)

大多数调优选项都与调整堆大小和选择最适合您的情况的垃圾收集器有关。JIT对性能也有很大的影响,但是很少需要使用新版本的JVM进行调优。

一般来说,在调优Java应用程序时,重要的是要有以下两个主要目标之一:
响应性:应用程序或系统为所请求的数据做出相应的速度。对于注重响应性的应用来说,较长的停顿时间是不可接受的,关键是要在短时间内做出响应。
吞吐量:(批处理任务,数据量大的任务)侧重于在特定时间段内最大化应用的工作负载。对于注重吞吐量的应用程序,高暂停时间是可以接受的。因为高吞吐量应用长期专注于基准测试,所以不需要考虑响应时间。

注意:系统瓶颈的核心还是代码的应用。一般不需要过多调优,JVM本身也在不断优化。

jpskb下载(jptt下载)插图(1)

② 示例

只有一个类。这门课不需要模拟全场景,需要搞一些大型项目。就像每年双11都说做了全品类业务的压力测试。其实它上线的时候还是需要卡的,只是当天会卡在双11,不可能完全按照生产环境的比例来做。它需要做的事情就像数学一样,同样的推理和套路就能做到。生产环境其实只是运营一个更大的环境。

启动程序,模拟用户的请求,每100毫秒创建1000个线程,每个线程创建一个512kb的对象。100毫秒最多1000个线程,并发1000/s,吞吐量6000/s,检查一下GC的情况。

导入org . spring framework . boot . spring application;导入org . spring framework . boot . auto configure . spring boot application;导入Java . util . random;导入Java . util . concurrent . executors;导入Java . util . concurrent . time unit;//启动程序模拟用户的请求。//每100毫秒创建1000个线程,每个线程创建一个512kb的对象。100毫秒最多1000个线程,并发1000/s,吞吐量6000/s,检查GC @ spring boot application public class performance application { public static void main(string[]args){ spring application . run(performance application . class,args)的情况;executors . newscheduledthreadpool(1)。scheduleAtFixedRate(()-& gt;{新线程(()-& gt;{ for(int I = 0;我& lt1000;I++) {try {// No work,专用于512k b byte[]temp = new byte[1024 * 512]的小对象;Thread.sleep(新随机()。nextInt(100));//随机睡眠200ms内} catch(中断异常e){ e . printstacktrace();} } }).start();},100,100,时间单位。毫秒);} }//打包mvn干净包//在服务器上运行performance-1.0.0.jarpom.xml

& lt?xml版本= & # 34;1.0"编码= & # 34;UTF-8 & # 34;?& gt& ltxmlns项目= & # 34;http://maven.apache.org/POM/4.0.0" xmlns:xsi = & # 34;http://www.w3.org/2001/XMLSchema-instance" xsi:schema location = & # 34;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" & lt;modelVersion & gt4 . 0 . 0 & lt;/model version & gt;& ltgroupId & gtcom.study .第三章& lt/groupId & gt;& ltartifactId & gt性能& lt/artifact id & gt;& lt版本& gt1 . 1 . 0 & lt;/version & gt;& lt名称& gt第三章& lt/name & gt;& lt描述& gt性能优化章节代码

服务器:端口:8080

jpskb下载(jptt下载)插图(2)

打包成jar,maven干净安装;

(2)调谐演示

① 虚拟机信息

4G双核Centos7

jpskb下载(jptt下载)插图(3)

② 配置环境 && 安装jdk环境

配置dns

jpskb下载(jptt下载)插图(4)

安装阿里云仓库的百胜

CD/etc/yum . repos . d/wget http://mirrors.aliyun.com/repo/Centos-7.repomv centos-base . repos centos-base . repo . bakmv centos-7 . repos centos-base . repo安装jdk

Pro.sh shell脚本内容

#!/bin/bash soft _ PATH =/opt/soft if[!-d $ SOFT _ PATH];然后thenmkdir $ SOFT _ PATHelseecho & # 34文件夹已经存在& # 34;fiyum install-y wget # install JDK 1.8 CD $ SOFT _ path wget-no-cookies-no-check-certificate-header & # 34;cookie:gpw _ e24 = http % 3A % 2F % 2fwww . Oracle . com % 2F;Oracle license = accept-securebackup-cookie & # 34;"http://download . Oracle . com/OTN-pub/Java/JDK/8u 141-b15/336 fa 29 ff 2 bb 4 ef 291 e 347 e 091 f 7 F4 a 7/JDK-8u 141-Linux-x64 . tar . gz & # 34;tar-zxvf JDK *-C$SOFT _ path CD JDK * JAVA _ HOME = ` pwd `# install MAVEN 3 . 2 . 3 CD$SOFT _ path wget https://archive . Apache . org/dist/MAVEN/MAVEN-3/3 . 2 . 3/binaries/Apache-MAVEN-3 . 2 . 3-bin . tar . gztar-zxvf apache-maven-3.2.3-bin.tar.gz-C$SOFT _ path mv Apache-MAVEN-3 . 2 . 3 MAVEN-3 . 2 . 3 CD MAVEN/Make install ln-s/usr/local/bin/git/usr/bin/git #追加环境变量echo & # 34export JAVA _ HOME = $ { JAVA _ HOME } & # 34;& gt& gt/etc/profile echo & # 34;导出路径= # 34;"JAVA _ HOME/bin:# 34;"路径& # 34;& gt& gt/etc/profile echo & # 34;export MAVEN _ HOME = $ { MAVEN _ HOME } & # 34;& gt& gt/etc/profile echo & # 34;导出路径= # 34;"MAVEN _ HOME/bin:# 34;"路径& # 34;& gt& gt/etc/profile source/etc/profile #输出信息echo & # 34-源更新-& # 34;回声& # 34;java版本& # 34;Java-version echo & # 34;maven版本& # 34;mvn-vecho & # 34;-路径-& # 34;回声& # 34;JAVA _ HOME:& # 34;$ JAVA _ HOMEecho & # 34MAVEN _ HOME:& # 34;$MAVEN_HOMEsource /etc/profile设置权限,通过脚本安装jdk和MAVEN。

chmod 777 pro.sh./pro.shsource /etc/profile

jpskb下载(jptt下载)插图(5)chmod 777 pro . sh ./pro . sh source/etc/profile

jpskb下载(jptt下载)插图(6)

安装lrzsz便于通过crt上传jar包

yum -y install lrzsz

jpskb下载(jptt下载)插图(7)yum -y安装lrzsz

Rz上传jar包

jpskb下载(jptt下载)插图(8)

② 启动jar包

设置1gb的内存

java -Xmx1024m -jar performance-1.1.0.jar

jpskb下载(jptt下载)插图(9)java -Xmx1024m -jar性能

③ 监控这个程序

Jcmd查看正在运行的java程序

jpskb下载(jptt下载)插图(10)

再看堆的用法,用在To Space是空,因为总会有复制算法。利用率已经是99%了。

jmap -heap 19587

jpskb下载(jptt下载)插图(11)jmap-堆19587

怎么调?调音的理念是什么?

④ GC 调优思路
1.分析场景

比如:启动速度慢;偶尔,响应速度比平均速度慢,或者出现堵塞。

2.确定目标

内存使用、低延迟(web程序)、吞吐量。

3.收集日志

通过参数配置收集GC日志(事后分析,一次一步),并通过JDK(jstat)工具检查GC状态。

4.分析日志

使用工具分析日志,检查GC时间和GC时间。

5.调整参数

切换垃圾收集器或调整垃圾收集器参数。

(3)通用GC参数

-xx:并行GC线程数(并行GC线程数和CPU数一样没关系)
-xx:并发GC线程数(GC正在运行,业务代码正在被加扰)
不能设置的GC线程数与应用的线程数相同。所有人都在争夺资源,都失去了。

-XX:MaxGCPauseMillis=n,最大GC暂停时间,这是一个软目标。JVM会尽可能少的暂停(但不保证),这个时间不能设置太多。如果设置为10秒,则意味着程序在10秒内没有运行。本来是停1秒,结果你设为1ms,GC也做不到。它只能调整新生代,老年,幸存者等。尽可能接近你设定的时间。一般不会有太大影响。

-XX:GCTimeRatio:设置吞吐量,其值为0-100之间的整数。假设GCTimeRatio的值为n,系统在垃圾收集上花费的时间不会超过1/(1+n)。如果你设置为99秒。1秒GC,但是99秒产生的数据量比较大,1秒GC解决不了。事实上,这是浪费时间。一般不会有太大影响。

-XX:SurvivorRatio:设置eden区域大小与Survivor区域大小的比值,默认为8。如果新生界是100米,幸存者是10米,伊甸园区是80米。这没多大作用,通常GC需要自适应。

-XX:NewRatio:新生代与老年的比例,默认为4,新生代:老年=1:4,新生代占五分之一。这没多大作用,通常GC需要自适应。

-verbose:gc,-XX:+printgc打印GC的简要信息。
-XX:+PrintGCDetails打印GC细节。已经废弃了。
-XX:+printgcstimestamps打印GC发生的时间戳。已经废弃了。
-Xloggc:log/gc.log指定gc日志的位置,并将其作为文件输出。(不能用控制台打印,都存成文件了)。
xx:+printheapgc在每次gc后打印堆信息。

(4)之后打印gc日志以分析gc

① 命令收集gc信息

java -Xmx1024m -Xloggc:gc1.log -jar performance-1.1.0.jar

jpskb下载(jptt下载)插图(12)Java-xmx 1024m-Xloggc:gc1 . log-jar性能-1.1.0.jar

② 查看日志发现很多full gc

more gc1.log

jpskb下载(jptt下载)插图(13)更多gc1.log

③ 工具的方式查看gc

本地下载gc1.log

#下载到默认的下载目录,在crt有设置sz gc1.log

jpskb下载(jptt下载)插图(14)#下载到默认的下载目录,在crt中设置sz gc1.log。

④ 工具下载

GCViewer工具,帮助分析GC日志文件的https://github.com/chewiebug/GCViewer/wiki/Changelog。

jpskb下载(jptt下载)插图(15)

jpskb下载(jptt下载)插图(16)

java -jar gcviewer-1.36-SNAPSHOT.jar

jpskb下载(jptt下载)插图(17)1.36-SNAPSHOT.jar

⑤ 加载gc日志文件

jpskb下载(jptt下载)插图(18)

⑥ 分析gc文件结果

Gc暂停时间是26秒,gc时间是3962。在没有并行gc的情况下,偶尔是0,满3秒GC。GC的完整次数是56次。也就是说,整个gc需要26+3 =29秒。

jpskb下载(jptt下载)插图(19)

右下角是总结、记忆和暂停情况。暂停29秒。暂停4018次。最长时间为133毫秒。完整的gc积分时间为23秒。年轻一代gc paunses的情况。

jpskb下载(jptt下载)插图(20)

总内存713.5M,最大满gc后释放59.6M,满GC释放9.313mb,差不多9 g内存。年轻一代一共释放了1276G内存。一秒钟最多占用750MB内存,由后辈释放。

jpskb下载(jptt下载)插图(21)

与肉眼相比,界面更加明显。其实都很好理解。直接看官网。有一个解释。

jpskb下载(jptt下载)插图(22)

(5)实时打印gc日志以分析gc

① 介绍

获取实时gc信息。

② 命令

# 查找到performance-1.0.0.jar的进程号jcmd | grep "jar" | awk '{print $1}'# jmap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况jmap -heap $(jcmd | grep "jar" | awk '{print $1}') jstat -gc -h10 $(jcmd | grep "jar" | awk '{print $1}') 1000

jpskb下载(jptt下载)插图(23)#找到性能的进程号JCMD | grep-1 . 0 . 0 . jar & # 34;罐子& # 34;| awk & # 39{ print $ 1 } & # 39# jmap打印堆的汇总信息,GC使用的算法,堆的配置和wise heap jmap-heap $(jcmd | grep & # 34;罐子& # 34;| awk & # 39{ print $ 1 } & # 39)jstat-GC-h10 $(jcmd | grep & # 34;罐子& # 34;| awk & # 39{ print $ 1 } & # 39) 1000

默认情况下,实时监控结果:10秒内163(641-478)次YGC和11(33-24)次FullGC,耗时2.185-1.602秒。

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 38912.0 38400.0 33345.0 0.0 245760.0 0.0 210944.0 172272.4 35120.0 33550.8 4656.0 4334.2 478 7.215 24 1.602 8.81736352.0 36352.0 32321.0 0.0 249856.0 0.0 215040.0 197339.4 35120.0 33550.8 4656.0 4334.2 496 7.447 25 1.662 9.10936864.0 37376.0 0.0 30720.9 247808.0 0.0 212992.0 205039.2 35376.0 33555.5 4656.0 4334.2 513 7.665 27 1.727 9.39335328.0 35328.0 29248.9 0.0 251392.0 62523.4 236032.0 56434.7 35376.0 33555.5 4656.0 4334.2 530 7.872 28 1.857 9.72934816.0 34816.0 30720.9 0.0 253952.0 0.0 240128.0 54903.1 35376.0 33555.8 4656.0 4334.2 548 8.118 29 1.926 10.04333280.0 33792.0 0.0 0.0 256000.0 0.0 246272.0 54396.0 35376.0 33555.8 4656.0 4334.2 566 8.344 30 1.989 10.33333792.0 34304.0 0.0 27648.8 254464.0 0.0 246272.0 236809.6 35376.0 33555.8 4656.0 4334.2 585 8.571 31 1.989 10.56032768.0 32768.0 28736.9 0.0 256512.0 55225.3 255488.0 236302.0 35376.0 33555.8 4656.0 4334.2 604 8.800 31 2.052 10.85132256.0 32256.0 0.0 25152.8 258048.0 0.0 261632.0 229634.7 35376.0 33555.8 4656.0 4334.2 623 9.034 32 2.120 11.15432256.0 32256.0 22528.7 0.0 258560.0 86025.6 273408.0 175333.9 35376.0 33555.8 4656.0 4334.2 641 9.262 33 2.185 11.447

jpskb下载(jptt下载)插图(24)S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 38912.0 38400.0 33345.0 0.0 245760.0 0.0 210944.0 172272.4 35120.0 33550.8 4656.0 433 4.2 478 7.215 24 1.602 8.8173652.4 7.872 28 1.857 9.72934816.0 34816.0 30720.9 0.0 253952.0 0.0 240128.0 54903.1 35376.0 33555.8 4656.0 43 34.2 548 8.118 29 1.926 10.04333280.0 33792.0 0.0 0.0 256000.0 0.0 246272.0 54396.0 35376.0 33555.8 4656.0 4334.2 566 8.344 30 1.989 10.33333792.0 3430 4.0 0.0 27648.8 254464.0 0.0 246272.0 236809.6 35376.0 33555.8 4656.0 4334.2 585 8.571 31 1.989 10.56032768.0 32768.0 28736.9 0.0 256512.0 55225.3 2554 88.0 236302.0 35376.0 33555.8 4656.0 4334.2 604 8.800 31 2.052 10.85132256.0 32256.0 0.0 25152.8 258048.0 0.0 261632.0 229634.7 35376.0 33555.8 4656.0 4334.2 623 9.034 32 2.120 11.15432256.0 32256.0 22528.7 0.0 258560.0 86025.6 273408.0 175333.9 35376.0 33555.8 4656.0 4334.2 641 9.262 33 2.185 11.447

(6)调谐操作

① 查看配置参数

调整配置以提高gc的效率。本质优化就是不断调整小参数,让我们的程序更稳定。

jpsjinfo -flags 11367

jpskb下载(jptt下载)插图(25)jpsjinfo -flags 11367

② 垃圾收集Parallel参数调优JDK 默认的收集器吞吐量优先

-XX:+UseParallelGC新一代使用并行收集器- XX:+UseParallelOldGC老一代使用并行收集器-XX:ParallelGCThread设置用于垃圾收集的线程数-XX:+useadaptivesizepolicy开启自适应GC策略看是否开启默认自适应,发现默认开启。

java -XX:+PrintFlagsFinal -version| grep UseAdaptiveSizePolicy

jpskb下载(jptt下载)插图(26)Java-XX:+print flags final-version | grep UseAdaptiveSizePolicy

调整gc线程的数量,首先检查当前GC线程的数量,当前为2。

java -XX:+PrintFlagsFinal -version| grep ParallelGCThreads

jpskb下载(jptt下载)插图(27)Java-XX:+print flags final-version | grep ParallelGCThreads

GC调整的线程数是4。

java -Xmx1024m -Xloggc:gc1.log -XX:ParallelGCThreads=4 -jar performance-1.1.0.jar

jpskb下载(jptt下载)插图(28)Java-xmx 1024m-Xloggc:gc1 . log-XX:ParallelGCThreads = 4-jar performance-1 . 1 . 0 . jar

jstat-GC-h10 $(jcmd | grep & # 34;罐子& # 34;| awk & # 39{ print $ 1 } & # 39)将GC线程数调整为1000后,实时监控结果:10秒内148(2208 -2060)次YGC,0(56-56)次FullGC,耗时28.545- 27.687 ≈ 0.9秒,比之前的还是有效的。

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 512.0 512.0 32.0 0.0 348160.0 45472.1 520192.0 46763.4 35120.0 33567.4 4656.0 4334.2 2060 23.275 56 4.4412 27.687512.0 512.0643 56 4.412 28.055512.0 512.0 512.0 64.0 348160.0 0.0 520192.0 137398.1 35120.0 33567.4 4656.0 4334.2 2143 23.737 56 4.412 28.149512.0 512.0 512.0 0 0 64.0

jpskb下载(jptt下载)插图(29)

调整GC线程数后,实时监控结果:10秒内147(1237 -1090)次YGC,2(27-25)次FullGC,耗时14.822- 13.764 ≈ 1秒,还不如线程数为4时。

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 8192.0 8192.0 5120.2 0.0 332800.0 173817.8 35120.0 33532.8 4656.0 4336.3 1090 11.542 25 2.222 13.7647680.0 2.296 14.1478704.0 8704.0 6656.2 0.0 331776.0 34081.6 190976.0 102204.6 35120.0 33532.8 4656 .0 4336.3 1154 11.953 26 2.296 14.2499216.0 9216.0 0.0 6688.2 329728.0 0.0 190976.0 124813.3 35120.0 33532.8 4656.0 4336.3 1171 12.053 26 2.296 14.3499 216.0 9216.0 6176.2 0.0 330752.0 0.0 190976.0 144861.9 35120.0 33532.8 4656.0 4336.3 1188 12.155 26 2.296 14.4519216.0 9216.0 7200.2 0.0 330752.0 26303 9.0 190976.0 162862.4 35120.0 33532.8 4656.0 4336.3 1204 12.258 26 2.296 14.5548704.0 8704.0 0.0 0.0 330752.0 0.0 198144.0 24643.6 35120.0 33532.8 4656 .0 4336.3 1220 12.361 27 2.371 14.7329216.0 9216.0.0 8224.2 330752.0 52984.5 198144.0 41620.212272474

CMS initiatingcoccupancyfraction:触发CMS收集器的内存比例。例如,60%意味着当内存达到60%时,将开始CMS并发收集。UseCMSCompactAtFullCollection:之前已经提到过,它用于在CMS收集器每次垃圾清理之后发送一次内存清理。CMSFullGCsBeforeCompaction:设置为在几次CMS垃圾收集后触发内存清理。适应并发gc恢复

Java-xmx 1024m-xlog GC:gc1 . log-xx:+useconcmarksweepgc-jar performance-1 . 1 . 0 . jar调整GC线程数后,实时监控结果:94(3088 -2794) YGC次,0(86-86)10秒内FullGC次,合计

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 17024.0 17024.0 8709.4 0.0 136320.0 98880.4 35220.0 33554.0 4756.0 4336。8 2794 25.993 86 1.311 27.30417024.0 17024.0 11266.7 0.0 136320.0 26893.3 878208.0 170056.3 35220.0 33554.0 4756.0 4336.8 2826 26.255 86 1.311 27.56617 024.0 17024.0 9728.3 0.0 136320.0 0.0 878208.0 235086.6 35220.0 33554.0 4756.0 4336.8 2860 26.513 86 1.311 27.82417024.0 17024.0 0.0 10754.7 136320.0 1 8634.4 878208.0 300630.4 35220.0 33554.0 4756.0 4336.8 2893 26.771 86 1.311 28.08217024.0 17024.0 7680.2 0.0 136320.0 0.0 878208.0 367196.7 35220.0 335 54.0 4756.0 4336.8 2926 27.014 86 1.311 28.32517024.0 17024.0 10752.3 0.0 136320.0 5167.9 878208.0 431716.0 35220.0 33554.0 4756.0 4336.8 2958 27.230 8 6 1.311 28.54117024.0 17024.0 8704.3 0.0 136320.0 0.0 878208.0 505963.0 35220.0 33554.0 4756.0 4336.8 2990 27.457 86 1.311 28.76817024.0 17024.0 9728.3 0.0 136320.0 0.0 878208.0 570993.8 35220.0 33554.0 4756.0 4336.8 3023 27.688 86 1.311 28.99917024.0 17024.0 6656.2 0.0 136320.0 0.0 878208.0 643192.8 3220.0 33554.0 4756.0 4336.8 3056 27.919 86 1.311 29.3017024.0 17024.0 10756.7 0.0 136320.0.0884787776

Java-xmx 1024m-xlog gc:gc1 . log-xx:+useconcmarksweepgc-xx:congcthreads = 2-jar性能-1.1.0.jar调整GC线程数量后,实时监控结果:10秒内79(4246 -3967) YGC次,0 (81因为线程有用户线程和GC线程,所以总是竞争

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 17024.0 17024.0 5635.3 0.0 136320.0 136237.3 878208.0 437623.5 35344.0 33560.9 4652.0 4338.5 3967 36.037 81 1.431 37.466 81 1.431 38.30617024.0 17024.0 0.0 6144.2 136320.0 0.0 878208.0 484236.0 353 44.0 33560.9 4652.0 4338.5 4089 37.156 81 1.431 38.58717024.0 17024.0 0.0 7680.2 136320.0 0.0 878208.0 496017.6 35344.0 33560.9 4652.0 4338.5 4120 37.4 53 81 1.431 38.88417024.0 17024.0 0.0 5632.2 136320.0 0.0 878208.0 506774.8 35344.0 33560.9 4652.0 4338.5 4153 37.710 81 1.431 39.14117024.0 17024.0 0. 0 7683.0 136320.0 68343.6 878208.0 514971.7 35344.0 33560.9 4652.0 4338.5 4185 37.968 81 1.431 39.39917024.0 17024.0 0.0 8195.4 136320.0 0.0 878208.0 5 28288.3 35344.0 33560.9 4652.0 4338.5 4216 38.275 81 1.431 39.70617024.0 17024.0 0.0 9219.0 136320.0 0.0 878208.0 541605.8 35344.0 33560.9 4652.0 4338.5 4246 38.580 81 1.431 40.011③ G1参数调优JDK8兼容吞吐量后的主流垃圾收集器。超过50%的Java堆被实时数据占用。建议使用大堆(大约6GB或更大)和具有有限GC延迟要求(稳定且可预测的暂停时间小于0.5秒)的应用程序。

jpskb下载(jptt下载)插图(30)

Java-xmx 1024m-XLOG gc:gc1 . log-xx:+usg 1 GC-JAR Performance-1 . 1 . 0 . JAR调整GC线程数后,实时监控结果为:10秒内38(69 -31)个ygc和0个满GC,总时间为0.577- 0.429 ≈100

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 0.0 1024.0 659456.0 28672.0 388096.0 381451.3 33479.6 4732.0 4332。9 31 0.429 0 0.000 0.429 0.0 0.0 0.0 0.0 660480.0 26624.0 388096.0 159753.1 35196.0 33484.1 4732.0 4334.0 34 0.439 0 0.000 0.439 0.0 1024.0 0.0 1024.0 659456.0 31744.0 388096.0 337736.3 35196.0 33484.1 4732.0 4334.0 37 0.449 0 0.000 0.449 0.0 1024.0 0.0 1024.0 659456.0 27648.0 388096.0 181066.6 35196.0 33484.7 4732.0 4334.0 41 0.462 0 0.000 0.462 0.0 1024.0 0.0 1024.0 659456.0 9216.0 388096.0 109389.5 35196.0 33484.9 4732.0 4334.0 45 0.480 0 0.000 0 .480 0.0 1024.0 0.0 1024.0 659456.0 21504.0 388096.0 160088.2 35196.0 33487.6 4732.0 4334.0 49 0.500 0 0.000 0.500 0.0 1024.0 0.0 1024.0 659456.0 34816 .0 388096.0 373093.0 35196.0 33487.6 4732.0 4334.0 53 0.515 0 0.000 0.515 0.0 0.0 0.0 0.0 660480.0 32768.0 388096.0 238949.6 35196.0 33487.6 4732.0 433 4.0 58 0.533 0 0.000 0.533 0.0 1024.0 0.0 1024.0 573440.0 35840.0 474112.0 473973.9 35196.0 33487.6 4732.0 4334.0 63 0.551 0 0.000 0.551 0.0 0.0 0.0 0. 0 55296.0 3072.0 993280.0 138607.9 35196.0 33487.6 4732.0 4334.0 69 0.577 0.000 0.577(VI)运行时JIT编译器优化参数

① 介绍

JIT是指将字节码编译成本地代码(汇编),只有热代码才会被编译成本地代码。解释器执行借用内存,而编译器执行可以用来提高效率。

② 参数设置

-XX:+AggressiveOpts允许jvm使用主动性能优化函数-XX:-TieredCompilation分层编译jdk8默认开启,Jdk7默认关闭client-Xmaxjitcodesize,-xx: reservedDecochesize指定JIT编译代码的最大代码并告知缓存最大值-Xmixed。解释器执行除热方法之外的所有字节码。方法用于初始化编译后的汇编指令,缓冲区大小,byte -XX:+PrintCompilation为本机代码-xx: initialcodcachesize。打开编译日志jstat-compiler PID-XX:cicompilercountjit编译锁使用的线程数-XX:+DoEscapeAnalysis转义分析,默认开启。代码深度优化-XX:-inline方法被约束,PS: JVM参数调优默认开启。这是一项非常细致和耐心的工作。夜深人静写文章的时候演示,平时是写不出来的。太累了。一个参数是穷举方法,不在java范畴,调优总是很慢。经常发现,像谈恋爱一样,初恋可能是最好的,最悲哀的是可能还没有。调优主要根据线程数量和空之间的大小。如果所有的示范真的太多了。很多时候代码、平台、服务器的优化能做的比较少,代码算法的优化是主要的。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/117067.html

发表回复

登录后才能评论