jvm參數解析(含調優過程)

? ? ? 前陣對底層賬單系統進行了壓測調優,調優的最后一步--jvm啟動參數中,減小了線程的堆??臻g:-XX:ThreadStackSize=256K,縮減至原來的四分之一,效果明顯,不過并沒有調試其他內存空間及gc相關參數。這次有機會在實際壓測中,調優這一部分內容,筆者以cms收集器為例,將有、無調優配置情況下的壓測結果進行對比,來分析各項調用參數的意義及效果。


準備工作:

1.調用查詢接口的測試jar包,作為dubbo-consumer,依賴了查詢服務的api,測試module基于maven開發,執行maven clean package即可通過編譯得到jar包,本次查詢api使用賬戶查詢接口getUserAccount

2.JMeter:Apache組織開發的基于Java的壓力測試工具,添加測試計劃,線程組容量均為200

方案:

無限次請求查詢接口(保證任意時刻并發量相同),觀察Error%為0,當請求平穩進行時的tps,為該接口吞吐量

實施:

1.jvm中只配置打印gc日志等監控參數

-XX:+PrintGCDetails:打印gc日志詳細信息

-XX:+PrintGCTimeStamps:打印gc發生時相對jvm啟動的時間戳,(后來加入了PrintGCDateStamps,打印gc發生的日期)

-Xloggc:設置gc日志的生成位置

壓測聚合報告

壓測數據穩定后,我們觀察到200線程并發壓力下,tps可達到1200+,99%Line600ms左右,我們觀察一下gc日志

這里截取了一次minor gc的數據,兩次gc發生間隔很短(最短不到1s就發生第二次minor gc),系統默認為新生代只分配了100到200MB左右空間,老年代也就是200到300MB左右,可以看出默認分配的空間并不大,并且由于新生代容量非常小,一直在頻繁發生gc。jvm默認采用PSYoungGen-并行收集器來回收新生代空間。

2.jvm中加入cms收集器,并手動規劃jvm空間分配

-Xms4096M:堆容量初始值

-Xmx4096M:堆容量最大值

-Xmn1024M:新生代容量,所以老年代容量 = 堆容量 - 新生代容量 = 3072M

-Xss256K:線程堆??臻g大小

-XX:MaxDirectMemorySize:Direct Buffer Memory大小

-Djava.awt.headless=true:使用缺少外設的系統配置模式

-Dfile.encoding=UTF-8:設置編碼規范

jmx配置用于遠程管理

-XX:+HeapDumpOutOfMemoryError:當出現OOM時,打印堆快照

-XX:HeapDumpPath:堆快照打印路徑,建議文件后綴設為hprof,可被MAT識別

-XX:+DisableExplicitGC:關閉System.gc()

-XX:SurvivorRatio=1:Eden區與Survivor區的大小比值

-XX:+UserConcMarkSweepGC:使用CMS收集器

-XX:+UserParNewGC:新生代使用ParNew收集器

-XX:+CMSParallelRemarkEnabled:降低標記停頓

-XX+UseCMSCompactAtFullCollection:在full gc的時候,對年老代的壓縮

-XX:CMSFullGCsBeforeCompaction=0:full gc后不壓縮老年代內存空間

-XX:LargePageSizeInBytes:內存頁的大小

-XX:+UseFastAccessorMethods:原始類型的快速優化

-XX:+UseCMSInitiatingOccupancyOnly:使用手動定義初始化定義開始CMS收集,禁止hostspot自行觸發CMS GC

-XX:CMSInitiatingOccupancyFraction=80:老年代使用80%后開始CMS收集

-XX:SoftRefLRUPolicyMSPerMB=0:每兆堆空閑空間中SoftReference的存活時間為0秒

? ? ? ?以上這些配置我們重點關注jvm空間分配相關參數和收集器相關參數,首先擴大了堆空間大小至4G,新生代1G,老年代3G,直觀上系統可以承載更多實例的創建,但是同樣也可能造成因對象引用導致的尋址時間增加。另外,手動配置了使用CMS收集器回收老年代,CMS是一種以最短停頓時間為目標的收集器,使用CMS并不能達到GC效率最高,但由于其擁有并發線程進行標記工作,所以盡可能地降低了GC時服務的停頓時間。而為了保證應用線程不停頓,系統需要更多的CPU資源??偟脕碚f,CMS回收器減少了回收的停頓時間,但是降低了堆空間的利用率,也降低了吞吐量,所以使用該收集器的前提是應用程序對停頓比較敏感,并且有許多生存周期長的對象。我們在此處使用該收集器主要用來觀察手動配置后與默認配置相比有哪些優劣。壓測結果如下

我們發現這種情況下吞吐量有小幅度提高,并且響應時間降低,那么jvm起了哪些作用呢,我們看一下gc日志

eden、s1、s2容量被新生代均分為3份,兩個gc間隔時間為2s左右,已進行了2次full gc,其余時間一直在執行minor gc。兩張圖結合分析,我們發現隨著新生代容量的擴大,jvm創建實例能力略有提高,同樣200個線程的并發壓力,同一時間可以承受更多的請求,那是不是新生代容量越大吞吐量就越高呢,筆者后來將新生代內存調至3G,吞吐量不增反降,說明其二者并不是線性相關。我們此時可以確定的是:jvm內存容量要適當增大,并且內存分配比例要盡可能符合jvm對對象的實際創建情況。


總結:

? ? ? ?jvm參數是靈活使用jvm的關鍵,我們在使用時需要謹慎添加,當然如果搭配的好,至少在系統內部服務層面,性能會有客觀的提升。但這也是想表達的另一個觀點,如何配置jvm內存空間,選擇哪些gc收集器組合,并沒有絕對的標準,絕對的好與不好,都是在多次的權衡、搭配下,產生對你所運行的服務一個相對好的效果。jvm調優路漫漫,吾將繼續求索。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容

  • 參數設置 在Java虛擬機的參數中,有3種表示方法用“ps -ef |grep "java"命令,可以得到當前Ja...
    九問閱讀 9,171評論 2 52
  • 原文閱讀 前言 這段時間懈怠了,罪過! 最近看到有同事也開始用上了微信公眾號寫博客了,挺好的~給他們點贊,這博客我...
    碼農戲碼閱讀 6,007評論 2 31
  • Java 虛擬機有自己完善的硬件架構, 如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM 屏蔽了與具體操作系...
    尹小凱閱讀 1,702評論 0 10
  • Tomcat 的缺省配置是不能穩定長期運行的,也就是不適合生產環境,它會死機,讓你不斷重新啟動,甚至在午夜時分喚醒...
    憤怒的_菜鳥閱讀 2,132評論 0 24
  • Tomcat 的缺省配置是不能穩定長期運行的,也就是不適合生產環境,它會死機,讓你不斷重新啟動,甚至在午夜時分喚醒...
    java面試收割機閱讀 1,207評論 0 8