亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot項(xiàng)目調(diào)優(yōu)及垃圾回收器的比較詳解

 更新時(shí)間:2020年04月03日 09:36:30   作者:Pitt_96  
這篇文章主要介紹了SpringBoot項(xiàng)目調(diào)優(yōu)及垃圾回收器的比較詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、SpringBoot項(xiàng)目在外部Tomcat啟動(dòng)時(shí)加載兩次

如下所示,spring標(biāo)志出現(xiàn)兩次(截取部分代碼)

.  ____     _      __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::    (v1.5.7.RELEASE)

2020-04-02 16:57:29.505 INFO 19964 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : Starting MainApplication on LAPTOP-1U9EARRO with PID 19964 (D:\apache-tomcat-8.5.42\apache-tomcat-8.5.42\webapps\kill-0.0.1-SNAPSHOT\WEB-INF\classes started by pitt in C:\Users\pitt\AppData\Local\MyEclipse 2017 CI)
2020-04-02 16:57:29.508 DEBUG 19964 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : Running with Spring Boot v1.5.7.RELEASE, Spring v4.3.11.RELEASE
2020-04-02 16:57:29.509 INFO 19964 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : No active profile set, falling back to default profiles: default
2020-04-02 16:57:29.539 INFO 19964 --- [ost-startStop-1] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1e20bc0d: startup date [Thu Apr 02 16:57:29 GMT+08:00 2020]; root of context hierarchy
2020-04-02 16:57:30.097 INFO 19964 --- [ost-startStop-1] o.s.b.f.xml.XmlBeanDefinitionReader   : Loading XML bean definitions from class path resource [spring/spring-jdbc.xml]
2020-04-02 16:57:30.141 WARN 19964 --- [ost-startStop-1] o.m.s.mapper.ClassPathMapperScanner   : No MyBatis mapper was found in '[com.pitt.kill.model.mapper]' package. Please check your configuration.
2020-04-02 16:57:30.258 WARN 19964 --- [ost-startStop-1] o.m.s.mapper.ClassPathMapperScanner   : No MyBatis mapper was found in '[com.pitt.kill.server]' package. Please check your configuration.
2020-04-02 16:57:30.307 INFO 19964 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!

 .  ____     _      __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::    (v1.5.7.RELEASE)

2020-04-02 16:57:37.069 INFO 19964 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : Starting MainApplication on LAPTOP-1U9EARRO with PID 19964 (D:\apache-tomcat-8.5.42\apache-tomcat-8.5.42\webapps\server\WEB-INF\classes started by pitt in C:\Users\pitt\AppData\Local\MyEclipse 2017 CI)
2020-04-02 16:57:37.072 DEBUG 19964 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : Running with Spring Boot v1.5.7.RELEASE, Spring v4.3.11.RELEASE
2020-04-02 16:57:37.072 INFO 19964 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : No active profile set, falling back to default profiles: default
2020-04-02 16:57:37.102 INFO 19964 --- [ost-startStop-1] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1565ae71: startup date [Thu Apr 02 16:57:37 GMT+08:00 2020]; root of context hierarchy
2020-04-02 16:57:37.675 INFO 19964 --- [ost-startStop-1] o.s.b.f.xml.XmlBeanDefinitionReader   : Loading XML bean definitions from class path resource [spring/spring-jdbc.xml]
2020-04-02 16:57:37.863 INFO 19964 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-04-02 16:57:38.422 INFO 19964 --- [ost-startStop-1] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.amqp.rabbit.annotation.RabbitBootstrapConfiguration' of type [org.springframework.amqp.rabbit.annotation.RabbitBootstrapConfiguration$$EnhancerBySpringCGLIB$$6cdea02f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-04-02 16:57:38.456 INFO 19964 --- [ost-startStop-1] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.pitt.kill.server.config.ShiroConfig$$EnhancerBySpringCGLIB$$4392bed0] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

加載時(shí)間30s

2020-04-02 16:57:42.825 INFO 19964 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : Started MainApplication in 6.091 seconds (JVM running for 30.348)
2020-04-02 16:57:42.946 INFO 19964 --- [      main] org.apache.catalina.startup.Catalina   : Server startup in 29361 ms

原因:打開(kāi)配置文件server.xml,Tomcat在啟動(dòng)web項(xiàng)目時(shí),會(huì)首先在Host標(biāo)簽中找webapps下的項(xiàng)目,進(jìn)行加載后,又會(huì)在Context 標(biāo)簽中再次加載,導(dǎo)致加載兩次
解決: 將appBase="webapps"替換為appBase = " "

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Context docBase="D:\apache-tomcat-8.5.42\apache-tomcat-8.5.42\webapps\server" path="" reloadable="true" source="org.eclipse.jst.jee.server:server"/>

加載一次時(shí)間為12s

2020-04-02 17:03:12.759 INFO 952 --- [ost-startStop-1] com.pitt.kill.server.MainApplication   : Started MainApplication in 7.478 seconds (JVM running for 12.532)
2020-04-02 17:03:13.100 INFO 952 --- [      main] org.apache.catalina.startup.Catalina   : Server startup in 11772 ms

二、禁用字節(jié)碼驗(yàn)證過(guò)程

對(duì)類的加載時(shí)間進(jìn)行優(yōu)化,首先查看類的加載時(shí)間

C:\Program Files\Java\jdk1.8.0_211\bin>jps
16612 QuorumPeerMain
9172 Main
19416 MyEclipse
952 Bootstrap
19580 Jps

C:\Program Files\Java\jdk1.8.0_211\bin>jstat -class 952
Loaded Bytes Unloaded Bytes   Time
 10533 20062.0    0   0.0    7.83

我們默認(rèn)通過(guò)MyEclipse編譯的代碼是可靠的,不需要在加載的時(shí)候進(jìn)行字節(jié)碼驗(yàn)證,使用-Xverify:none參數(shù)將字節(jié)碼驗(yàn)證過(guò)程禁用掉,來(lái)提升類的加載速度

C:\Program Files\Java\jdk1.8.0_211\bin>jstat -class 12308
Loaded Bytes Unloaded Bytes   Time
 9822 18874.2    0   0.0    6.70

提升效果一般,只減少了1s
此外由于HotSpot采用了JIT編譯器可以提前加載熱代碼,1.8版本JVM的代碼編譯速度已經(jīng)比較優(yōu)秀,此處不做優(yōu)化

三、調(diào)整內(nèi)存設(shè)置控制垃圾收集頻率

Java8默認(rèn)的GC回收器為Parallel Scavenge + Parallel Old


用Jmeter發(fā)送請(qǐng)求作為輔助測(cè)試

可以看到,測(cè)試時(shí)間內(nèi),發(fā)起了103次Minor GC,耗時(shí)不到1s,其實(shí)時(shí)間停頓并不多,但是5次Full GC占用了很大部分的GC時(shí)間,主要針對(duì)這部分時(shí)間進(jìn)行優(yōu)化。通過(guò)-Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails參數(shù)打印GC日志,將Full GC挑出如下:

7.934: [Full GC (Metadata GC Threshold) [PSYoungGen: 926K->0K(647680K)] [ParOldGen: 54198K->15711K(65024K)] 55125K->15711K(712704K), [Metaspace: 20674K->20674K(1069056K)], 0.0303162 secs] [Times: user=0.03 sys=0.00, real=0.03 secs] 
10.430: [Full GC (Metadata GC Threshold) [PSYoungGen: 3883K->0K(646656K)] [ParOldGen: 20986K->17184K(80896K)] 24870K->17184K(727552K), [Metaspace: 34377K->34377K(1081344K)], 0.0413074 secs] [Times: user=0.28 sys=0.00, real=0.04 secs] 
379.971: [Full GC (Metadata GC Threshold) [PSYoungGen: 2528K->0K(93696K)] [ParOldGen: 65885K->58730K(132096K)] 68413K->58730K(225792K), [Metaspace: 57642K->57535K(1101824K)], 0.3908541 secs] [Times: user=0.97 sys=0.00, real=0.39 secs] 
390.977: [Full GC (Ergonomics) [PSYoungGen: 8688K->0K(230400K)] [ParOldGen: 129221K->120704K(226304K)] 137909K->120704K(456704K), [Metaspace: 62151K->62115K(1105920K)], 0.1319683 secs] [Times: user=0.50 sys=0.02, real=0.13 secs] 
553.770: [Full GC (Ergonomics) [PSYoungGen: 47104K->0K(513536K)] [ParOldGen: 228052K->120789K(249344K)] 275156K->120789K(762880K), [Metaspace: 62330K->62330K(1105920K)], 0.1344527 secs] [Times: user=0.27 sys=0.02, real=0.13 secs] 

每一次Full GC都伴隨著老年代的擴(kuò)容,日志還顯示有時(shí)候內(nèi)存回收狀況不理想,獲取可用的內(nèi)存主要通過(guò)空間的擴(kuò)容。
查看運(yùn)行期間的CPU使用情況,如下圖:


垃圾回收的CPU使用率曲線幾乎看不到,CPU資源還有可利用的余地,為此想到更換原有的垃圾回收器來(lái)進(jìn)行GC優(yōu)化

CMS:

相比于默認(rèn)的Parallel GC明顯改善了Full GC所消耗的時(shí)間,Stop The World時(shí)間減少,但是Minor GC大量增加,嘗試調(diào)整新生代的大小來(lái)減少M(fèi)inor GC的產(chǎn)生,在使用-XX:NewRatio=1 -XX:SurvivorRatio=3
-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85參數(shù)進(jìn)行調(diào)整后,Minor GC數(shù)量下降,但是相比而言還是很多


G1:

G1為最新的垃圾回收算法,將新生代和老年代同時(shí)進(jìn)行標(biāo)記和回收,采用標(biāo)記-整理算法,不會(huì)產(chǎn)生內(nèi)存碎片,在時(shí)間消耗上表現(xiàn)的最好,平均每次回收占用的時(shí)間最短,并且最好在內(nèi)存比較大的機(jī)器上使用G1算法進(jìn)行回收


G1的優(yōu)勢(shì)在于:
作為CMS的長(zhǎng)期替代品
1、G1是一個(gè)壓縮收集器,提供足夠強(qiáng)的壓縮來(lái)完全避免狹小的內(nèi)存分配
2、依賴Regions概念,大大簡(jiǎn)化收集器邏輯,大部分情況下規(guī)避潛在的內(nèi)存碎片問(wèn)題
3、比CMS的GC停頓時(shí)長(zhǎng)更加可預(yù)測(cè),并允許用戶指定停頓時(shí)長(zhǎng)

總結(jié):

以上三種回收器都為多線程垃圾回收器,但是對(duì)于不同的環(huán)境,應(yīng)該具體問(wèn)題具體分析,而不是采用一刀切的方法,解決問(wèn)題的過(guò)程即為尋找最優(yōu)解的過(guò)程。

到此這篇關(guān)于SpringBoot項(xiàng)目調(diào)優(yōu)及垃圾回收器的比較詳解的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目調(diào)優(yōu)及垃圾回收器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的Kotlin?內(nèi)部類原理

    Java中的Kotlin?內(nèi)部類原理

    這篇文章主要介紹了Java中的Kotlin?內(nèi)部類原理,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • java用戶管理注冊(cè)功能 含前后臺(tái)代碼

    java用戶管理注冊(cè)功能 含前后臺(tái)代碼

    這篇文章主要介紹了java用戶管理注冊(cè)功能,含前端和后臺(tái)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Java對(duì)時(shí)間的簡(jiǎn)單操作實(shí)例

    Java對(duì)時(shí)間的簡(jiǎn)單操作實(shí)例

    這篇文章主要介紹了Java對(duì)時(shí)間的簡(jiǎn)單操作,實(shí)例分析了針對(duì)java.util.Date的各類常見(jiàn)操作,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • SpringBoot詳解MySQL如何實(shí)現(xiàn)讀寫分離

    SpringBoot詳解MySQL如何實(shí)現(xiàn)讀寫分離

    當(dāng)響應(yīng)的瓶頸在數(shù)據(jù)庫(kù)的時(shí)候,就要考慮數(shù)據(jù)庫(kù)的讀寫分離,當(dāng)然還可以分庫(kù)分表,那是單表數(shù)據(jù)量特別大,當(dāng)單表數(shù)據(jù)量不是特別大,但是請(qǐng)求量比較大的時(shí)候,就要考慮讀寫分離了.具體的話,還是要看自己的業(yè)務(wù)...如果還是很慢,那就要分庫(kù)分表了...我們這篇就簡(jiǎn)單講一下讀寫分離
    2022-09-09
  • 深入了解Spring Boot2.3.0及以上版本的Liveness和Readiness功能

    深入了解Spring Boot2.3.0及以上版本的Liveness和Readiness功能

    這篇文章主要介紹了Spring Boot2.3.0及以上版本的Liveness和Readiness功能示例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • java環(huán)境變量配置超詳細(xì)圖文教程

    java環(huán)境變量配置超詳細(xì)圖文教程

    在我們學(xué)習(xí)Java語(yǔ)言的時(shí)候,要在命令提示符里運(yùn)用Java和Javac,用到這兩個(gè)命令的時(shí)候就要配置Java環(huán)節(jié)變量才可以,這篇文章主要給大家介紹了關(guān)于java環(huán)境變量配置的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • SpringCloud中的Stream服務(wù)間消息傳遞詳解

    SpringCloud中的Stream服務(wù)間消息傳遞詳解

    這篇文章主要介紹了SpringCloud中的Stream服務(wù)間消息傳遞詳解,Stream 就是在消息隊(duì)列的基礎(chǔ)上,對(duì)其進(jìn)行封裝,可以是我們更方便的去使用,Stream應(yīng)用由第三方的中間件組成,應(yīng)用間的通信通過(guò)輸入通道和輸出通道完成,需要的朋友可以參考下
    2024-01-01
  • Java之MyBatis入門詳解

    Java之MyBatis入門詳解

    這篇文章主要介紹了Java之MyBatis入門詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 詳解spring cloud hystrix 請(qǐng)求合并collapsing

    詳解spring cloud hystrix 請(qǐng)求合并collapsing

    這篇文章主要介紹了詳解spring cloud hystrix 請(qǐng)求合并collapsing,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 解決java執(zhí)行cmd命令調(diào)用ffmpeg報(bào)錯(cuò)Concat error - No such filter ''[0,0]''問(wèn)題

    解決java執(zhí)行cmd命令調(diào)用ffmpeg報(bào)錯(cuò)Concat error - No such filter ''[0,0]

    這篇文章主要介紹了java執(zhí)行cmd命令,調(diào)用ffmpeg報(bào)錯(cuò)Concat error - No such filter '[0,0]'解決方法,本文通過(guò)截圖實(shí)例代碼說(shuō)明給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論