最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java JVM調優(yōu)五大技能詳解

 更新時間:2021年11月22日 15:24:10   作者:程序員小強  
這篇文章主要為大家介紹了JVM調優(yōu)的五大技能,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.什么時候需要JVM調優(yōu)

  • 應用的響應慢、CPU占用高
  • 應用吞吐量小,占用內(nèi)存空間過大

這些表象一般伴隨著頻繁的垃圾回收,或者OOM。

2.JVM調優(yōu)一般調什么

  • 應用占用的內(nèi)存(堆內(nèi)存,元空間內(nèi)存)
  • 新生代老年代的大小,比例。
  • 垃圾回收器的選擇。

堆內(nèi)存參數(shù)

| -Xms512m | 初始堆大小

默認值:若未設置,初始值將是老年代和年輕代分配制內(nèi)存之和
-Xmx1024m

年輕代內(nèi)存相關參數(shù)

| -Xmn512m | 新生代的初始值及最大值。

默認值:堆內(nèi)存的1/4(已經(jīng)分配的堆內(nèi)存的1/4)。
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:NewRatio=8

比如-XX:NewRatio=8

表示:老年代內(nèi)存:年輕代內(nèi)存=8:1 |

| -XX:SurvivorRatio=8 | 新生代和存活區(qū)的比例

-XX:SurvivorRatio=8

表示存活區(qū):新生代=1:8 =》新生代占年輕代的8/10,每個存活區(qū)各占年輕代的1/10 |

元空間參數(shù)

| -XX:MetaspaceSize | 初始元空間大小

達到該值就會觸發(fā)垃圾收集進行類型卸載
-XX:MaxMetaspaceSize=256m

3.JVM調優(yōu)基本步驟

首先在啟動程序的時候

3.1添加GC日志相關的參數(shù)

-XX:+PrintGC:輸出GC日志
-XX:+PrintGCDetails:輸出GC的詳細日志
-XX:+PrintGCTimeStamps:輸出GC的時間戳(以基準時間的形式)
-XX:+PrintGCDateStamps:輸出GC的時間戳(以日期的形式,如2018-08-29T19:22:48.741-0800)
-XX:+PrintHeapAtGC:在進行GC的前后打印出堆的信息
-Xloggc:gc.log:日志文件的輸出路徑

3.2添加內(nèi)存溢出與Full gc前快照輸出參數(shù)

-XX:+HeapDumpOnOutOfMemoryError 發(fā)生內(nèi)存溢出時生成heapdump文件
-XX:+HeapDumpBeforeFullGC 發(fā)生Full gc前生成heapdump文件
-XX:HeapDumpPath:指定heapdump輸出路徑

3.3通過日志確定問題

3.3.1堆內(nèi)存不足

  • 排查是否是設置的堆內(nèi)存過小,還是內(nèi)存溢出情況。
  • 拿到當時的內(nèi)存快照,用工具分析 jump用Mat工具分析。

3.3.2頻繁Full gc

  • 考慮是否是新上線的代碼問題,有大對象占用,導致了頻繁YGC,進而導致了晉升至年老代的對象增多,老年代達到內(nèi)存閾值觸發(fā) Full gc ;
  • 考慮是否是新生代設置太小 ;

總結:

若是代碼問題可通過版本控制工具找到本期變更的代碼,優(yōu)化代碼

若非代碼問題,可適當增加堆內(nèi)存大小、新生代老年代的大小與比例 , 適當增大新生代內(nèi)存大小。

4.監(jiān)控工具

4.1使用jstat 統(tǒng)計gc相關信息

jstat 是 jdk bin 下自帶工具,最多的是用來統(tǒng)計gc相關信息,使用步驟如下。

獲取進程號 ps -ef|grep 對應進程

例如我想統(tǒng)計jvm-demo.jar(進程號27164)的gc信息,并且每隔3秒統(tǒng)計一次,可以執(zhí)行以下命令

jstat -gcutil 27164 3000

在這里插入圖片描述

主要關注以下幾個。

  • s0、s1:表示兩個survior區(qū)域的使用百分比
  • e:eden區(qū)域使用百分比
  • o:老年代使用百分比
  • m:metaspace(元數(shù)據(jù)空間)使用百分比
  • ygc:新生代gc次數(shù)
  • ygct:新生代gc累計總時間
  • fgc:full gc次數(shù)
  • fgct:full gc累計總時間
  • gct:gc累計總時間

若要進一步查看上一次GC信息

jstat -gccause 27146 3000

在這里插入圖片描述

  • LGCC:上一次gc的原因,Allocation Failure是新生代滿了,進行gc
  • gcc:當前gc的原因,如果當前沒有gc就no gc

4.2使用jmap命令查某時刻的JVM堆信息

使用步驟

  • 獲取進行 pid ps -ef|grep 對應進程
  • 例如我想統(tǒng)計jvm-demo.jar(進程號27164)的信息,并且每隔3秒統(tǒng)計一次,可以執(zhí)行以下命令
jmap -heap 2865

輸出內(nèi)容示例:

Attaching to process ID 27146, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.144-b01
using thread-local object allocation.
Mark Sweep Compact GC
#堆相關的配置信息
Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 104857600 (100.0MB)
   NewSize                  = 10485760 (10.0MB)
   MaxNewSize               = 34930688 (33.3125MB)
   OldSize                  = 20971520 (20.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)
#堆占用相關的配置信息
Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 12517376 (11.9375MB)
   used     = 10708296 (10.212226867675781MB)
   free     = 1809080 (1.7252731323242188MB)
   85.54745020042539% used
Eden Space:
   capacity = 11141120 (10.625MB)
   used     = 10708272 (10.212203979492188MB)
   free     = 432848 (0.4127960205078125MB)
   96.11486098345588% used
From Space:
   capacity = 1376256 (1.3125MB)
   used     = 24 (2.288818359375E-5MB)
   free     = 1376232 (1.3124771118164062MB)
   0.0017438616071428572% used
To Space:
   capacity = 1376256 (1.3125MB)
   used     = 0 (0.0MB)
   free     = 1376256 (1.3125MB)
   0.0% used
tenured generation:
   capacity = 27684864 (26.40234375MB)
   used     = 27096504 (25.84123992919922MB)
   free     = 588360 (0.5611038208007812MB)
   97.87479541167332% used
15431 interned Strings occupying 2044328 bytes.

5.常用的調優(yōu)工具有哪些?

JDK內(nèi)置的命令行:jps(查看jvm進程信息)、jstat(監(jiān)視jvm運行狀態(tài)的,比如gc情況、jvm內(nèi)存情況、類加載情況等)、jinfo(查看jvm參數(shù)的,也可動態(tài)調整)、jmap(生成dump文件的,在dump的時候會影響線上服務)、jhat(分析dump的,但是一般都將dump導出放到mat上分析)、jstack(查看線程的)。

JDK內(nèi)置的可視化界面:JConsoleVisualVM,這兩個在QA環(huán)境壓測的時候很有用。

阿里巴巴開源的arthas:神器,線上調優(yōu)很方便,安裝和顯示效果都很友好

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • idea 無法創(chuàng)建Scala class 選項的原因分析及解決辦法匯總

    idea 無法創(chuàng)建Scala class 選項的原因分析及解決辦法匯總

    這篇文章主要介紹了idea 無法創(chuàng)建Scala class 選項的解決辦法匯總,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Spring Boot結合IDEA自帶Maven插件如何快速切換profile

    Spring Boot結合IDEA自帶Maven插件如何快速切換profile

    IDEA是目前 Java 開發(fā)者中使用最多的開發(fā)工具,它有著簡約的設計風格,強大的集成工具,便利的快捷鍵,這篇文章主要介紹了Spring Boot結合IDEA自帶Maven插件快速切換profile,需要的朋友可以參考下
    2023-03-03
  • Java集合源碼全面分析

    Java集合源碼全面分析

    下面小編就為大家?guī)硪黄狫ava集合源碼全面分析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • Java?Date類的使用方式(日期處理)

    Java?Date類的使用方式(日期處理)

    本文介紹了Java中的Date類和Calendar類的使用,詳細講解了Date類的構造方法和常用方法,并通過一個實例演示了如何使用Date類來比較兩個時間點之間的關系
    2024-11-11
  • Java多線程之線程狀態(tài)詳解

    Java多線程之線程狀態(tài)詳解

    這篇文章主要介紹了Java多線程 線程狀態(tài)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-09-09
  • sharding-jdbc讀寫分離原理詳細解析

    sharding-jdbc讀寫分離原理詳細解析

    這篇文章主要介紹了sharding-jdbc讀寫分離原理詳細解析,很多時候,為了應付DB的高并發(fā)讀寫,我們會采用讀寫分離技術,讀寫分離指的是利用數(shù)據(jù)庫主從技術(把數(shù)據(jù)復制到多個節(jié)點中),分散讀多個庫以支持高并發(fā)的讀,需要的朋友可以參考下
    2023-12-12
  • 淺談Storm在zookeeper上的目錄結構

    淺談Storm在zookeeper上的目錄結構

    這篇文章主要介紹了淺談Storm在zookeeper上的目錄結構的相關內(nèi)容,涉及storm使用zookeeper的操作以及詳細結構圖,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Java大文本并行計算實現(xiàn)過程解析

    Java大文本并行計算實現(xiàn)過程解析

    這篇文章主要介紹了Java大文本并行計算如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Java基礎之并發(fā)相關知識總結

    Java基礎之并發(fā)相關知識總結

    隨著摩爾定律逐步失效,cpu單核性能達到瓶頸,并發(fā)逐漸逐漸得到廣泛應用,因而學習了解以及使用并發(fā)就顯得十分重要,但并發(fā)相關的知識比較瑣碎,不易系統(tǒng)學習,因而本篇文章參照王寶令老師《Java并發(fā)編程》來勾勒出一張“并發(fā)全景圖”,需要的朋友可以參考下
    2021-05-05
  • SpringBoot+Mybatis-Plus實現(xiàn)mysql讀寫分離方案的示例代碼

    SpringBoot+Mybatis-Plus實現(xiàn)mysql讀寫分離方案的示例代碼

    這篇文章主要介紹了SpringBoot+Mybatis-Plus實現(xiàn)mysql讀寫分離方案的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論

龙川县| 开平市| 安溪县| 永胜县| 探索| 玛沁县| 太保市| 馆陶县| 乌鲁木齐市| 成武县| 瑞丽市| 海盐县| 巴林右旗| 莫力| 仪陇县| 安达市| 罗城| 沅江市| 孝义市| 屏边| 茶陵县| 舞阳县| 曲周县| 邹平县| 西藏| 濉溪县| 麦盖提县| 云阳县| 沧州市| 万源市| 霍林郭勒市| 北辰区| 中山市| 广平县| 瑞昌市| 佛学| 武隆县| 阿坝| 北票市| 商河县| 青铜峡市|