欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JVM內(nèi)存參數(shù)配置詳解

 更新時(shí)間:2022年02月21日 09:23:56   作者:QH.Thomas  
本文主要介紹了JVM內(nèi)存參數(shù)配置詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

首先我們知道:JVM發(fā)生內(nèi)存錯(cuò)誤的類型

1、堆內(nèi)存泄漏:OutOfMemory:Java heap space

此種內(nèi)存泄漏,增加內(nèi)存,只能暫時(shí)解決問題,并不能根治問題。必須要優(yōu)化代碼,一定是代碼的問題:排查堆中的大量對(duì)象,就會(huì)發(fā)現(xiàn),這些對(duì)象都被引用,對(duì)象不能及時(shí)被回收,導(dǎo)致超出了堆的設(shè)定最大內(nèi)存。

2、老年代內(nèi)存泄漏:OutOfMemoryError:PermGen space

類名、訪問修飾符、字段描述、方法描述等,所占空間大于永久代最大值,就會(huì)出現(xiàn),一般都是初始化內(nèi)存的時(shí)候,空間太小,解決辦法是擴(kuò)大空間

3、棧內(nèi)存泄漏:StackOverflowError

代碼執(zhí)行時(shí),代碼進(jìn)棧,此刻如果棧的內(nèi)存不足以容納要進(jìn)棧的代碼的大小空間,那么久會(huì)報(bào)該錯(cuò)誤??梢酝ㄟ^設(shè)置棧的空間大小。一般通過:-Xss設(shè)置線程的大小來解決。比如:-Xss256m

下面進(jìn)入如何檢測(cè)jvm內(nèi)存情況的實(shí)際操作:

1、監(jiān)控JVM的GC情況:

jstat -gcutil pid 2000 20 (只需要看O,如果達(dá)到100%,并且長(zhǎng)期處于100%,則代表老年代內(nèi)存不足)

pid:服務(wù)進(jìn)程的pid,可通過:ps -ef | grep java 來查看java的服務(wù)進(jìn)程pid

2000:每隔多少秒進(jìn)行監(jiān)控一次。這里是2秒

20: 總共獲取20次

E:eden區(qū)
O:老年代
P:永久代
YGC:新生代的GC次數(shù)
YGCT:當(dāng)前統(tǒng)計(jì)的YGC一共花費(fèi)的時(shí)間(毫秒)
FGC:fullGC老年代的GC次數(shù)
FGCT:當(dāng)前統(tǒng)計(jì)的FGC一共花費(fèi)的時(shí)間(毫秒)
GCT:YGC+FGC

2、查看jvm配置信息

jmap -head pid //可以看到j(luò)ava進(jìn)程的堆的配置信息,各區(qū)的空間大小和配置信息

?

3、查看jvm中類和對(duì)象的占用情況

jmap -histo 5279 | head -20 //查看jvm中各個(gè)類的實(shí)例數(shù)、占用內(nèi)存數(shù)量以及類的全名

?

4、上面使我們的基本命令使用,那么我們?cè)趺搭A(yù)測(cè)或者說內(nèi)存泄漏會(huì)有什么征兆?

1、tps出現(xiàn)大幅波動(dòng),并慢慢降低,甚至降為0,響應(yīng)時(shí)間隨之波動(dòng),慢慢升高
2、通過jstat命令看到,Jvm中Old區(qū)不斷增加,F(xiàn)ullGC非常頻繁,對(duì)應(yīng)的FullGC消耗的時(shí)間也不斷增加
3、通過jconsole/jvisualvm可以看到,堆內(nèi)存曲線不斷上升,接近上限時(shí),變成一條直線
4、日志報(bào)錯(cuò)java.lang.OutOfMemoryError: Java heap space

5、內(nèi)存泄露怎么定位?

(1、確定征兆: 現(xiàn)象方面,Java進(jìn)程拋出OOM異常,分析屬于那種異常,是正常的內(nèi)存資源耗盡還是內(nèi)存泄漏。

(2、監(jiān)控jvm的GC情況: jstat -gcutil pid 1000 100 (只需要看O,如果達(dá)到100%,并且長(zhǎng)期處于100%,則代表老年代內(nèi)存不足) 如果有大量的FGC就要查詢是否有內(nèi)存泄漏的問題了

(3、通過jmap命令:jmap -histo pid | head -20,查看當(dāng)前堆內(nèi)存中實(shí)例數(shù)和占用內(nèi)存最多的前20個(gè)對(duì)象

(4、通過jvisualvm分析定位:進(jìn)行遠(yuǎn)程堆dump,然后把dump文件下載下來,用jvisualvm打開進(jìn)行分析,可以看到更直觀的jvm中對(duì)象的信息

6、下面是進(jìn)行最后的JVM參數(shù)調(diào)優(yōu):

vm常用參數(shù)
---------------------------------------
堆內(nèi)存 = 年輕代+老年代
年輕代 = Eden+Survivor
Survivor = From Space+To Space
---------------------------------------
年輕代 = Eden+From Space+To Space
堆內(nèi)存=Eden+From Space+To Space+老年代
====================================

-Xms2048m:初始堆大小,建議<物理內(nèi)存的1/4,默認(rèn)值為物理內(nèi)存的1/64

-Xmx2048m:最大堆大小,建議與-Xms保持一致,默認(rèn)值為物理內(nèi)存的1/4

-Xmn512m:新生代大小,建議不超過堆內(nèi)存的1/2-Xss256k,線程堆棧大小,建議256k

-XX:PermSize=256m:永久代初始值,默認(rèn)值為物理內(nèi)存的1/64

-XX:MaxPermSize=256m:永久代最大值,默認(rèn)值為物理內(nèi)存的1/4

-XX:SurvivorRatio=8:年輕帶中Eden區(qū)和Survivor區(qū)的比例,默認(rèn)為8:1,即Eden(8),F(xiàn)romSpace(1),ToSpace(1)

-XX:MaxTenuringThreshold=15:晉升到老年代的對(duì)象年齡,每個(gè)對(duì)象堅(jiān)持過一次MinorGC后對(duì)象年齡+1,默認(rèn)值是15,年齡超過15進(jìn)入到老年代,該參數(shù)在串行GC時(shí)有效-

XX:PretenureSizeThreshold=3145728:?jiǎn)挝蛔止?jié),只對(duì)Serial和ParNew兩款收集器有效,新生代采用Parallel Scavenge GC時(shí)無(wú)效,大于這個(gè)值的對(duì)象直接在老年代進(jìn)行分配

7、參數(shù)設(shè)置在哪里?

一般來說,一個(gè)服務(wù)器可能有多個(gè)java服務(wù)進(jìn)行,對(duì)吧?是很多服務(wù)器都會(huì)有這種情況,那么問題來了,那我要是統(tǒng)一在jvm配置文件修改jvm參數(shù),那么豈不是所有服務(wù)都是這個(gè)參數(shù)?所以有沒有其他辦法?

有?。。?!那就是在java進(jìn)程啟動(dòng)命令設(shè)置。

nohup java ${JAVA_OPT} -jar xxx.jar 2>&1&

JAVA_OPT的參數(shù):里面參數(shù)自行看要設(shè)置什么,以及具體的參數(shù)值

JAVA_OPT="-server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMatespaceSize=256m"

到此這篇關(guān)于JVM內(nèi)存參數(shù)配置詳解的文章就介紹到這了,更多相關(guān)JVM內(nèi)存參數(shù)配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot如何指定啟動(dòng)端口

    spring boot如何指定啟動(dòng)端口

    這篇文章主要介紹了spring boot如何指定啟動(dòng)端口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java并發(fā)volatile可見性的驗(yàn)證實(shí)現(xiàn)

    Java并發(fā)volatile可見性的驗(yàn)證實(shí)現(xiàn)

    這篇文章主要介紹了Java并發(fā)volatile可見性的驗(yàn)證實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 一文了解jJava中的加密與安全

    一文了解jJava中的加密與安全

    常見的編碼有ASCII碼、Unicode編碼。最簡(jiǎn)單的編碼是直接給每個(gè)字符指定一個(gè)若干字節(jié)表示的整數(shù),復(fù)雜一點(diǎn)的編碼就需要根據(jù)已有的編碼推算出來。本文將為大家詳細(xì)講講Java重點(diǎn)加密與安全,感興趣的可以了解一下
    2022-07-07
  • 基于Java中throw和throws的區(qū)別(詳解)

    基于Java中throw和throws的區(qū)別(詳解)

    下面小編就為大家?guī)硪黄贘ava中throw和throws的區(qū)別(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Springboot實(shí)現(xiàn)Java阿里短信發(fā)送代碼實(shí)例

    Springboot實(shí)現(xiàn)Java阿里短信發(fā)送代碼實(shí)例

    這篇文章主要介紹了springboot實(shí)現(xiàn)Java阿里短信發(fā)送代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java基礎(chǔ)之命名規(guī)范的詳解

    Java基礎(chǔ)之命名規(guī)范的詳解

    這篇文章主要介紹了Java基礎(chǔ)之命名規(guī)范的詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java基礎(chǔ)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Hibernate命名策略詳解

    Hibernate命名策略詳解

    本文主要介紹了Hibernate命名策略。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • java中拼接字符串的5種方法效率對(duì)比

    java中拼接字符串的5種方法效率對(duì)比

    這篇文章主要給大家介紹了關(guān)于java中拼接字符串的5種方法效率對(duì)比的相關(guān)資料,文中通過示例代碼和圖片介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • SpringBoot之Java配置的實(shí)現(xiàn)

    SpringBoot之Java配置的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot之Java配置的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • HashMap容量和負(fù)載因子使用說明

    HashMap容量和負(fù)載因子使用說明

    這篇文章主要介紹了HashMap容量和負(fù)載因子使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論