成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

美團面試:熟悉哪些JVM調優參數,幸好我準備過!

云計算 虛擬化
實話實說,很多人干了三、五年的Java開發,照樣沒用使用過JVM調優參數。但是,面試官可不管你有沒有用過,面試官心里想的是“這問題回答不出來,證明你很low B,還想要那么高的薪資,沒門”。

[[419665]]

實話實說,很多人干了三、五年的Java開發,照樣沒用使用過JVM調優參數。

但是,面試官可不管你有沒有用過,面試官心里想的是“這問題回答不出來,證明你很low B,還想要那么高的薪資,沒門”。

話不多說,我們開始今天的干貨。

首先,看看本文主要內容:

今天來熟悉一下,關于JVM調優常用的一些參數。

X或者XX開頭的都是非標準化參數

意思就是說標準化參數不會變,非標準化參數可能在每個JDK版本中有所變化,但是就目前來看X開頭的非標準化的參數改變的也是非常少。

  1. 格式:-XX:[+-]<name> 表示啟用或者禁用name屬性。 
  2. 例子:-XX:+UseG1GC(表示啟用G1垃圾收集器) 

-XX:+PrintCommandLineFlags查看當前JVM設置過的相關參數:

JVM參數分類

根據JVM參數開頭可以區分參數類型,共三類:“-”、“-X”、“-XX”,

標準參數(-):所有的JVM實現都必須實現這些參數的功能,而且向后兼容;

例子:-verbose:class,-verbose:gc,-verbose:jni……

非標準參數(-X):默認jvm實現這些參數的功能,但是并不保證所有jvm實現都滿足,且不保證向后兼容;

例子:Xms20m,-Xmx20m,-Xmn20m,-Xss128k……

非Stable參數(-XX):此類參數各個jvm實現會有所不同,將來可能會隨時取消,需要慎重使用;

例子:-XX:+PrintGCDetails,-XX:-UseParallelGC,-XX:+PrintGCTimeStamps……

堆參數設置

-Xms 初始堆大小,ms是memory start的簡稱 ,等價于-XX:InitialHeapSize-Xmx 最大堆大小,mx是memory max的簡稱 ,等價于參數-XX:MaxHeapSize

注意:在通常情況下,服務器項目在運行過程中,堆空間會不斷的收縮與擴張,勢必會造成不必要的系統壓力。

所以在生產環境中,JVM的Xms和Xmx要設置成大小一樣的,能夠避免GC在調整堆大小帶來的不必要的壓力。

-XX:NewSize=n 設置年輕代大小-XX:NewRatio=n 設置年輕代和年老代的比值。

如:-XX:NewRatio=3,表示年輕代與年老代比值為1:3,年輕代占整個年輕代年老代和的1/4,默認新生代和老年代的比例=1:2。-XX:SurvivorRatio=n 年輕代中Eden區與兩個Survivor區的比值。

注意Survivor區有兩個,默認是8,表示:Eden:S0:S1=8:1:1

如:-XX:SurvivorRatio=3,表示Eden:Survivor=3:2,一個Survivor區占整個年輕代的1/5。

元空間參數

-XX:MetaspaceSize:Metaspace 空間初始大小,如果不設置的話,默認是20.79M,這個初始大小是觸發首次 Metaspace Full GC的閾值。

例如:-XX:MetaspaceSize=256M

-XX:MaxMetaspaceSize:Metaspace 最大值,默認不限制大小,但是線上環境建議設置。

例如:-XX:MaxMetaspaceSize=256M

-XX:MinMetaspaceFreeRatio:最小空閑比,當 Metaspace 發生 GC 后,會計算 Metaspace 的空閑比,如果空閑比(空閑空間/當前 Metaspace 大小)小于此值,就會觸發 Metaspace 擴容。默認值是 40 ,也就是 40%,例如 -XX:MinMetaspaceFreeRatio=40

-XX:MaxMetaspaceFreeRatio:最大空閑比,當 Metaspace發生 GC 后,會計算 Metaspace 的空閑比,如果空閑比(空閑空間/當前 Metaspace 大小)大于此值,就會觸發 Metaspace 釋放空間。默認值是 70 ,也就是 70%,例如 -XX:MaxMetaspaceFreeRatio=70

建議將 MetaspaceSize 和 MaxMetaspaceSize設置為同樣大小,避免頻繁擴容。

棧參數設置

-Xss:棧空間大小,棧是線程獨占的,所以是一個線程使用棧空間的大小。

例如:-Xss256K,如果不設置此參數,默認值是1M,一般來講設置成 256K 就足夠了。

收集器參數設置

Serial垃圾收集器(新生代)

開啟:-XX:+UseSerialGC 關閉:-XX:-UseSerialGC //新生代使用Serial 老年代則使用SerialOld

ParNew垃圾收集器(新生代)

開啟 -XX:+UseParNewGC 關閉 -XX:-UseParNewGC //新生代使用功能ParNew 老年代則使用功能CMS

Parallel Scavenge收集器(新生代)

開啟 -XX:+UseParallelOldGC 關閉 -XX:-UseParallelOldGC //新生代使用功能Parallel Scavenge 老年代將會使用Parallel Old收集器

ParallelOl垃圾收集器(老年代)

開啟 -XX:+UseParallelGC 關閉 -XX:-UseParallelGC //新生代使用功能Parallel Scavenge 老年代將會使用Parallel Old收集器

CMS垃圾收集器(老年代)

開啟 -XX:+UseConcMarkSweepGC 關閉 -XX:-UseConcMarkSweepGC

G1垃圾收集器

開啟 -XX:+UseG1GC 關閉 -XX:-UseG1GC

GC策略參數配置

GC停頓時間,垃圾收集器會嘗試用各種手段達到這個時間,比如減小年輕代

-XX:MaxGCPauseMillis

堆占用了多少比例的時候觸發GC,就即觸發標記周期的 Java 堆占用率閾值。默認占用率是整個 Java 堆的 45%

-XX:InitiatingHeapOccupancyPercent=n

新生代可容納的最大對象,大于則直接會分配到老年代,0代表沒有限制。

-XX:PretenureSizeThreshold=1000000 //

進入老年代最小的GC年齡,年輕代對象轉換為老年代對象最小年齡值,默認值7

-XX:InitialTenuringThreshol=7

升級老年代年齡,最大值15

-XX:MaxTenuringThreshold

GC并行執行線程數

-XX:ParallelGCThreads=16

禁用 System.gc(),由于該方法默認會觸發 FGC,并且忽略參數中的 UseG1GC 和 UseConcMarkSweepGC,因此必要時可以禁用該方法。

-XX:-+DisableExplicitGC

設置吞吐量大小,默認99

XX:GCTimeRatio

打開自適應策略,各個區域的比率,晉升老年代的年齡等參數會被自動調整。以達到吞吐量,停頓時間的平衡點。

XX:UseAdaptiveSizePolicy

設置GC時間占用程序運行時間的百分比

GCTimeRatio

Dump異常快照

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆內存出現OOM的概率是所有內存耗盡異常中最高的,出錯時的堆內信息對解決問題非常有幫助。

所以給JVM設置這個參數(-XX:+HeapDumpOnOutOfMemoryError),讓JVM遇到OOM異常時能輸出堆內信息,并通過(-XX:+HeapDumpPath)參數設置堆內存溢出快照輸出的文件地址。

這對于特別是對相隔數月才出現的OOM異常尤為重要。

  1. -Xms10M -Xmx10M -Xmn2M -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError  
  2. -XX:HeapDumpPath=D:\study\log_hprof\gc.hprof 

-XX:OnOutOfMemoryError

表示發生OOM后,運行jconsole.exe程序。

這里可以不用加“”,因為jconsole.exe路徑Program Files含有空格。利用這個參數,我們可以在系統OOM后,自定義一個腳本,可以用來發送郵件告警信息,可以用來重啟系統等等。

  1. -XX:OnOutOfMemoryError="C:\Program Files\Java\jdk1.8.0_151\bin\jconsole.exe" 

8G內存的服務器該如何設置

  1. java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0 

-Xmx3500m 設置JVM最大可用內存為3550M。

-Xms3500m 設置JVM初始內存為3550m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存。-Xmn2g 設置年輕代大小為2G。

整個堆大小=年輕代大小 + 年老代大小 + 方法區大小

-Xss128k 設置每個線程的堆棧大小。

JDK1.5以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。

-XX:NewRatio=4 設置年輕代(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)。設置為4,則年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5 。

-XX:SurvivorRatio=4 設置年輕代中Eden區與Survivor區的大小比值。

設置為4,則兩個Survivor區與一個Eden區的比值為2:4,一個Survivor區占整個年輕代的1/6 -XX:MaxPermSize=16m 設置持久代大小為16m。

-XX:MaxTenuringThreshold=0 設置垃圾最大年齡。

如果設置為0的話,則年輕代對象不經過Survivor區,直接進入年老代。對于年老代比較多的應用,可以提高效率。如果將此值設置為一個較大值,則年輕代對象會在Survivor區進行多次復制,這樣可以增加對象在年輕代的存活時間,增加在年輕代即被回收的概論。

項目中,GC日志配置

比如,我們啟動一個user-service項目:

  1. java   
  2. -XX:+PrintGCDetails -XX:+PrintGCDateStamps  
  3. -XX:+UseGCLogFileRotation  
  4. -XX:+PrintHeapAtGC -XX:NumberOfGCLogFiles=5   
  5. -XX:GCLogFileSize=20M     
  6. -Xloggc:/opt/user-service-gc-%t.log   
  7. -jar user-service-1.0-SNAPSHOT.jar  

參數解釋:

  1. -Xloggc:/opt/app/ard-user/user-service-gc-%t.log   設置日志目錄和日志名稱 
  2. -XX:+UseGCLogFileRotation           開啟滾動生成日志 
  3. -XX:NumberOfGCLogFiles=5            滾動GC日志文件數,默認0,不滾動 
  4. -XX:GCLogFileSize=20M               GC文件滾動大小,需開啟UseGCLogFileRotation 
  5. -XX:+PrintGCDetails                 開啟記錄GC日志詳細信息(包括GC類型、各個操作使用的時間),并且在程序運行結束打印出JVM的內存占用情況 
  6. -XX:+ PrintGCDateStamps             記錄系統的GC時間            
  7. -XX:+PrintGCCause                   產生GC的原因(默認開啟) 

項目中沒用過怎么辦?

對于很多沒用過的人來說,面試官問項目中這些參數是怎么用?此時,很容易選擇妥協,傻傻的回答沒用過。

偷偷的告訴你,很多面試官也沒有用過。

另外,你可以自己搞個小項目,把JVM參數設置小點,使用測試工具JMeter,多線程測試一下。

在代碼里可以自己編造以下問題:

內存溢出

內存泄漏

棧溢出

然后使用JVM參數進行調優,或者通過JVM工具和相關命令找到問題,然后解決問題。

 

責任編輯:武曉燕 來源: Java后端技術全棧
相關推薦

2010-03-04 10:56:52

JVM參數

2010-09-25 13:05:07

JVM參數

2023-11-10 11:23:20

JVM內存

2023-04-24 14:54:09

JVM性能調優

2012-01-10 14:35:08

JavaJVM

2023-01-16 08:19:25

線上JVM調優

2021-12-06 11:03:57

JVM性能調優

2010-09-17 17:02:24

JVM參數

2017-07-21 08:55:13

TomcatJVM容器

2023-11-11 19:07:23

JVMJava

2024-05-21 09:08:57

JVM調優面試

2022-11-30 08:17:41

JVM調優技巧

2021-09-06 11:02:17

JVM架構調優

2021-03-17 11:35:11

JVM代碼Java

2010-09-26 13:39:46

JVM調優

2010-09-26 09:08:17

JVM調優

2012-01-10 15:13:56

JavaJVM

2017-10-13 15:16:38

Java服務GC參數

2018-04-23 09:50:54

2021-06-03 08:32:18

JVM調優虛擬機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品国产一区二区三区 | 蜜桃视频一区二区三区 | 亚洲精品久久国产高清情趣图文 | 色综合久 | 国产精品久久久久久久 | 91福利在线观看视频 | 伊人电影院av | 国产精品不卡视频 | 久久黄色网 | 国产欧美精品区一区二区三区 | 视频在线观看亚洲 | 麻豆亚洲 | 国产一区二区在线看 | 91免费在线视频 | 在线国产一区 | 国产成人精品高清久久 | 成人中文字幕在线 | 古装人性做爰av网站 | 在线看亚洲 | 国产激情精品 | 国产亚洲成av人片在线观看桃 | 日韩视频 中文字幕 | 一本一道久久a久久精品综合 | 午夜免费观看体验区 | 97免费视频在线观看 | 成人免费淫片aa视频免费 | 伊人看片| 精品一区二区三区免费视频 | 9色视频在线| 欧美自拍视频 | 免费午夜视频在线观看 | 美女在线国产 | 中文字幕在线观看视频一区 | 在线观看欧美一区 | 成人一级片在线观看 | av一区二区三区四区 | 国内精品久久久久久 | 三级国产三级在线 | 日韩av在线一区二区三区 | 日韩欧美在线一区 | 欧美成人不卡 |