idea啟動(dòng)后CPU飆升的問題解決
解決idea 啟動(dòng)后CPU飆升的問題
CPU飆升是因?yàn)閕dea產(chǎn)生了某種瘋狂消耗CPU資源,可以通過idea自帶的監(jiān)控來來觀察到底是什么進(jìn)程占用了CPU的資源
其實(shí)網(wǎng)上大部分講的都是因?yàn)镴IT(just in time,即時(shí)編譯技術(shù))導(dǎo)致CPU飆升,但是經(jīng)過我的檢測發(fā)現(xiàn),JIT也僅僅是我的idea卡頓的一部分原因。
配置前:
配置后:
可以觀測到idea CPU還是會飆升,但是JIT所占用的CPU大幅度下降,說明還是很有效果的。
# JIT 參數(shù) # 設(shè)置用于編譯的編譯器線程數(shù) -XX:CICompilerCount=2 # 開啟分層編譯 -XX:TieredStopAtLevel=1 # 控制最大數(shù)量嵌套調(diào)用內(nèi)聯(lián) -XX:MaxInlineLevel=3 -XX:Tier4MinInvocationThreshold=100000 -XX:Tier4InvocationThreshold=110000 -XX:Tier4CompileThreshold=120000
后續(xù)又發(fā)現(xiàn)是因?yàn)椴粩嗟卦谶M(jìn)行GC導(dǎo)致CPU飆升,因?yàn)槊看蜧C都會消耗99%的CPU資源,于是想著修改JVM參數(shù)來解決這個(gè)問題。
因?yàn)槲业膇dea是新裝的,他的堆大小參數(shù)為:
-Xms128m -Xmx2048m
然后查閱資料得知,當(dāng)Xms設(shè)置值比較小時(shí),會頻繁的觸發(fā)GC,而GC又會出現(xiàn)STW的情況,所以idea一直GC,那你的idea也必然是一卡一卡的,同時(shí)大部分都推薦相同值,這是為什么呢?
這是為了避免在由于heap內(nèi)存擴(kuò)大或縮小導(dǎo)致應(yīng)用停頓,降低延遲,同時(shí)避免每次垃圾回收完成后JVM 重新分配內(nèi)存。
所以修改后的堆的大小為:
-Xms2048m -Xmx2048m
然后又發(fā)現(xiàn)自己的GC收集器使用的是CMS,那么讀過JVM這本書的都知道,CMS采用 標(biāo)記-清理 的算法,標(biāo)記出垃圾對象,清除垃圾對象。算法是基于老年代執(zhí)行的,因?yàn)樾律a(chǎn)生無法接受該算法產(chǎn)生的碎片垃圾。他的缺點(diǎn)是:
- 無法清理浮動(dòng)垃圾,并發(fā)收集會造成內(nèi)存碎片過多
- 由于并發(fā)標(biāo)記和并發(fā)清理階段都是并發(fā)執(zhí)行,所以會額外消耗CPU資源
基于此,我將垃圾收集器也替換為了G1,G1的優(yōu)勢是:
- 可控制回收垃圾的時(shí)間
- 和CMS一樣采用標(biāo)記-清理的算法,但是G1不會產(chǎn)生空間碎片(G1從整體來講是基于標(biāo)記-整理來實(shí)現(xiàn)垃圾回收
從局部來講,又是把整個(gè)堆,切割為大小均勻的多個(gè)region,region與region之間采用標(biāo)記-復(fù)制算法實(shí)現(xiàn)),這樣就有效的使用了連續(xù)空間,不會導(dǎo)致連續(xù)空間不足提前造成GC的觸發(fā)。
最后貼出完整的JVM參數(shù):
-server -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:+AlwaysPreTouch -Xms2048m -Xmx2048m -XX:ReservedCodeCacheSize=512m -XX:+UseG1GC -XX:+UseStringDeduplication -XX:AutoBoxCacheMax=20000 -ea -Dsun.io.useCanonCaches=false -Dsun.awt.keepWorkingSetOnMinimize=true -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -Djsse.enablesSNIExtension=false -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Dfile.encoding=UTF-8 # JIT 參數(shù) # 設(shè)置用于編譯的編譯器線程數(shù) -XX:CICompilerCount=2 # 開啟分層編譯 -XX:TieredStopAtLevel=1 # 控制最大數(shù)量嵌套調(diào)用內(nèi)聯(lián) -XX:MaxInlineLevel=3 -XX:Tier4MinInvocationThreshold=100000 -XX:Tier4InvocationThreshold=110000 -XX:Tier4CompileThreshold=120000
如果以上操作還是不能解決CPU過高的話,還可以打開
1、打開idea設(shè)置 File–>Settings–> Build,Execution,Deployment --> Compiler
2、調(diào)整 Shared build process heap size(Mbytes) 大小,默認(rèn)值700,可修改至 1024(或者自定義數(shù)值)
至于網(wǎng)上還有提出的插件,或者代碼檢查我們也可以去嘗試一下,通過修改里面的配置結(jié)合idea自帶的監(jiān)控來快速準(zhǔn)確定位問題,但是也告訴我們,要對癥下藥,有自帶的工具去幫你,何樂而不為呢?
總結(jié)
到此這篇關(guān)于idea啟動(dòng)后CPU飆升的問題解決的文章就介紹到這了,更多相關(guān)idea啟動(dòng)后CPU飆升內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
輕量級思維導(dǎo)圖XMind?2023免費(fèi)激活教程
這篇文章主要介紹了輕量級思維導(dǎo)圖XMind?2023免費(fèi)激活教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Security安裝 Elastic SIEM 和 EDR的超詳細(xì)教程
這篇文章主要介紹了Security安裝 Elastic SIEM 和 EDR的超詳細(xì)教程,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03一個(gè)30多年編程經(jīng)驗(yàn)的程序員總結(jié)
這篇文章主要介紹了一個(gè)30多年編程經(jīng)驗(yàn)的程序員總結(jié),在我30多年的程序員生涯里,我學(xué)到了不少有用的東西,下面是我這些年積累的經(jīng)驗(yàn)精華,需要的朋友可以參考下2014-09-09