PS+PO調優實戰:hotspot參數、調優參數

MethodArea (永久代): 存儲class信息、方法信息、代碼編譯完的信息、字節碼.

1.7 之前叫 perm Generation ,  必須設置大小,並且JVM啓動之後沒辦法更改。存放字符串常量。

1.8叫 meta space,默認大小爲物理內存。 字符串常量存放在堆中。

GC調優:儘量減少FGC(full GC)

JVM 參數:

-XX:+UseSerialGC = Serial New (DefNew) + Serial Old 可以一起指定,也可以單獨指定

-XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old   1.7需要加上括號中的urrent,1.8不用

-XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默認) 【PS + SerialOld】

-XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old

-XX:+UseG1GC = G1

HotSpot參數分類

標準:- 開頭,所有的hotspot 支持

非標準:-X 開頭,特定hotspot支持

不穩定:-XX開頭,下個版本可能取消

參數查詢

1. 區分概念:內存泄漏memory leak,內存溢出out of memory
2. java -XX:+PrintCommandLineFlags HelloGC
3. java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC  HelloGC
   PrintGCDetails PrintGCTimeStamps PrintGCCauses
4. java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC
5. java -XX:+PrintFlagsInitial 默認參數值
6. java -XX:+PrintFlagsFinal 最終參數值
7. java -XX:+PrintFlagsFinal | grep xxx 找到對應的參數
8. java -XX:+PrintFlagsFinal -version |grep GC

GC日誌

 

調優前基礎概念:

1.吞吐量: 用戶代碼時間 / (用戶代碼執行時間 + 垃圾回收時間)

2.響應時間: STW越短,響應時間越好

調優要求:追求吞吐量還是響應時間,或是在滿足一定響應時間下,達到要求的吞吐量

吞吐量優先的,先選擇垃圾回收器(PS + PO)。例如: 科學計算、數據挖掘

響應時間優先的,儘量選擇 1.8 G1,其次 PN+CMS。 例如:網站、GUI、api

什麼是調優:

1.根據需求進行JVM規劃和預調優

2.優化運行JVM環境

3.解決JVM運行過程中出現的各種問題(OOM)

QPS(Query Per Second):服務器在一秒的時間內處理了多少個請求。QPS(TPS)= 併發數/平均響應時間

設定日誌參數
   1. -Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause

cpu 100%: 使用top,查看佔用cpu比較高的進程,使用top -Hp  進程ID ,查看對應的佔用cpu較高的線程。如果是java應用,使用 jstack 導出該線程的堆棧。然後查看哪個方法(棧幀)消耗時間  jstack。

內存飆高: 導出堆內存 jmap,使用jhat 、jvisualvm、mat 等等 進行分析。

如何監控JVM: jstat、jvisualvm 等等

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章