成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

jvm調(diào)優(yōu)

jemygraw / 2480人閱讀

摘要:垃圾回收垃圾檢測引用計數(shù)法和可達性分析算法。引用計數(shù)法給一個對象添加引用計數(shù)器,每當(dāng)有個地方引用它,計數(shù)器就加,引用失效就減。通常會在老年代內(nèi)存被占滿時將會觸發(fā),回收整個堆內(nèi)存。

基礎(chǔ)知識

JVM - HotSpot內(nèi)存布局(1.8之前版本)

1.8版本開始,持久區(qū)沒有了,替代它的是metaspace。對于32位JVM,我通常不建議Java堆大小超過2Gb(-Xms2048m, -Xmx2048m),對于64位而言,我通常建議在每個JVM進程中Java堆大小的起始值設(shè)置在3GB或者4GB。典型的年輕代和老年代的比例是1:3或者33%。

垃圾回收

垃圾檢測:引用計數(shù)法和可達性分析算法。
引用計數(shù)法:給一個對象添加引用計數(shù)器,每當(dāng)有個地方引用它,計數(shù)器就加1,引用失效就減1。如果對象互相引用,那么就導(dǎo)致內(nèi)存泄漏,所以這個方法已經(jīng)被廢棄。
可達性分析算法:以根集對象為起始點進行搜索,如果有對象不可達的話,即是垃圾對象。這里的根集一般包括java棧中引用的對象、方法區(qū)常量池中引用的對象和本地方法中引用的對象等。JVM在做垃圾回收的時候,會檢查堆中的所有對象是否會被這些根集對象引用,不能夠被引用的對象就會被垃圾收集器回收。
年輕代被分為3個部分,Enden區(qū)和兩個Survivor區(qū)。當(dāng)Eden區(qū)被對象填滿時,就會執(zhí)行Minor GC,并把所有存活下來的對象轉(zhuǎn)移到其中一個survivor區(qū)。Minor GC同樣會檢查先前存活下來的對象,也把它們轉(zhuǎn)移到這個survivor區(qū)。這樣在一段時間內(nèi),總會有一個空的survivor區(qū)。經(jīng)過多次GC周期后,仍然存活下來的對象會被轉(zhuǎn)移到年老代內(nèi)存空間。
年老代存放的都是生命周期較長的對象。通常會在老年代內(nèi)存被占滿時將會觸發(fā)Full GC,回收整個堆內(nèi)存。

常用工具:

jstack:查看每個線程的當(dāng)前狀態(tài)、調(diào)用棧、鎖住或等待去鎖定的資源,直接報告是否有線程死鎖。

/root/jdk1.8.0_101/bin/jstack -l 6126

jmap:打印出java進程(使用pid)內(nèi)存內(nèi)的,所有‘對象’的情況(如:產(chǎn)生那些對象,及其數(shù)量)。

jmap -dump:format=b,file=test.bin 6126

工具詳細列表:http://blog.csdn.net/fenglibi...
JVM參數(shù)詳解:http://0opslab.com/2016/01/16...

錯誤排查:

常見場景:CPU狂飆,通過ps -o pcpu,pid,tid找出是哪些線程在高頻率的使用CPU,然后使用jstack命令找出這些線程,如果是普通線程,它的call stack直接反映出問題所在。如果是GC線程,通過gc日志可以看出GC線程在拼命GC,但是GC前后效果不明顯,已用堆內(nèi)存始終降不下來,其它線程會表現(xiàn)為alloc_enqueue_allocation_and_wait_for_gc的native_blocked阻塞狀態(tài),此時用jmap命令dump堆內(nèi)存情況,使用eclipse MAT工具找出問題所在。
很多時候性能異常表現(xiàn)為偶然性,就是在不定的時間出現(xiàn)問題,此時通過給jvm加啟動參數(shù)來生成轉(zhuǎn)儲文件,然后事后分析。-verbose:gc -Xloggc:xxx.txt生成gc日志,-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=yyy.txt在OOM出現(xiàn)后自動生成了堆轉(zhuǎn)儲文件,據(jù)此可分析堆和線程的情況。

內(nèi)存溢出out of memory,是指程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用,出現(xiàn)out of memory;比如申請了一個integer,但給它存了long才能存下的數(shù),那就是內(nèi)存溢出。
內(nèi)存泄露memory leak,是指程序在申請內(nèi)存后,無法釋放已申請的內(nèi)存空間,一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很嚴重,無論多少內(nèi)存,遲早會被占光。memory leak會最終會導(dǎo)致out of memory!
以下為常見的內(nèi)存錯誤:

java.lang.OutOfMemoryError: Java heap space 堆空間被占滿
java.lang.OutOfMemoryError: PermGen space 持久代被占滿(1.8之前版本)
java.lang.StackOverflowError 線程棧溢出
Fatal: Stack size too small 線程local area滿
java.lang.OutOfMemoryError: unable to create new native thread 系統(tǒng)內(nèi)存被占滿

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66996.html

相關(guān)文章

  • 面試官問我JVM調(diào)優(yōu),我忍不住了!

    面試官:今天要不來聊聊JVM調(diào)優(yōu)相關(guān)的吧?面試官:你曾經(jīng)在生產(chǎn)環(huán)境下有過調(diào)優(yōu)JVM的經(jīng)歷嗎?候選者:沒有面試官:...候選者:嗯...是這樣的,我們一般優(yōu)化系統(tǒng)的思路是這樣的候選者:1. 一般來說關(guān)系型數(shù)據(jù)庫是先到瓶頸,首先排查是否為數(shù)據(jù)庫的問題候選者:(這個過程中就需要評估自己建的索引是否合理、是否需要引入分布式緩存、是否需要分庫分表等等)候選者:2. 然后,我們會考慮是否需要擴容(橫向和縱向都...

    不知名網(wǎng)友 評論0 收藏0
  • JVM體系結(jié)構(gòu)與GC調(diào)優(yōu)(二)

    摘要:在設(shè)計堆的大小時。設(shè)計為比更大的數(shù)前提是內(nèi)存允許。這樣既可以降低堆調(diào)整的頻率,還可以提高系統(tǒng)的負載能力新生代調(diào)優(yōu)大小增大區(qū)。因為時間跟存活對象成正比新生代調(diào)優(yōu)晉升盡可能讓對象停留在中。 jvm支持的垃圾收集器組合 showImg(https://segmentfault.com/img/bVbbcTv?w=1101&h=351); 組合選擇的標(biāo)準(zhǔn) 吞吐量=應(yīng)用運行時間/總時間 關(guān)...

    DirtyMind 評論0 收藏0
  • jvm調(diào)優(yōu)

    摘要:一內(nèi)存調(diào)優(yōu)主要的目的是減小的頻率和的次數(shù)。調(diào)優(yōu)工具之主要用來輸出中運行的進程狀態(tài)信息。調(diào)優(yōu)工具之和用來查看堆內(nèi)存使用狀況,一般結(jié)合使用。 一、jvm內(nèi)存調(diào)優(yōu) 主要的...

    snowLu 評論0 收藏0
  • JVM調(diào)優(yōu)之經(jīng)驗

    摘要:內(nèi)存設(shè)置現(xiàn)在線上業(yè)務(wù)系統(tǒng)基本物理內(nèi)存都是夠用的,不過物盡其用,我們調(diào)優(yōu)就是爭取讓每空間都發(fā)揮出最大的作用。區(qū)總內(nèi)存減去一個區(qū)的大小不宜過大,否則可能把物理內(nèi)存耗光。 在生產(chǎn)系統(tǒng)中,高吞吐和低延遲一直都是JVM調(diào)優(yōu)的最終目標(biāo),但這兩者恰恰又是相悖的,魚和熊掌不可兼得,所以在調(diào)優(yōu)之前要清楚舍誰而取誰。一般計算任務(wù)和組件服務(wù)會偏向高吞吐,而web展示則偏向低延遲才會帶來更好的用戶體驗。 本文...

    worldligang 評論0 收藏0
  • 記一次JVM調(diào)優(yōu)

    摘要:現(xiàn)象登入生產(chǎn)環(huán)境,使用命令因為這時候并沒有打的,所以只能觀察現(xiàn)象。其他的可以根據(jù)這個類推,是內(nèi)純的占用量。 前言 我們的游戲上線之初,經(jīng)常有玩家反饋卡,或者有網(wǎng)絡(luò)延遲等現(xiàn)象,造成用戶流失等現(xiàn)象,這時候我就想到是不是可能是之前的jvm配置有問題,或者存在內(nèi)存泄露等問題。 現(xiàn)象 登入生產(chǎn)環(huán)境,使用命令,因為這時候并沒有打gc的log,所以只能觀察現(xiàn)象。 jstat -gcutil 270...

    sugarmo 評論0 收藏0
  • Java性能調(diào)優(yōu)概述

    摘要:性能調(diào)優(yōu)概述性能優(yōu)化有風(fēng)險和弊端,性能調(diào)優(yōu)必須有明確的目標(biāo),不要為了調(diào)優(yōu)而調(diào)優(yōu)盲目調(diào)優(yōu),風(fēng)險遠大于收益程序性能的主要表現(xiàn)點執(zhí)行速度程序的反映是否迅速,響應(yīng)時間是否足夠短內(nèi)存分配內(nèi)存分配是否合理,是否過多地消耗內(nèi)存或者存在內(nèi)存泄漏啟動時間程序 [TOC] Java性能調(diào)優(yōu)概述 性能優(yōu)化有風(fēng)險和弊端,性能調(diào)優(yōu)必須有明確的目標(biāo),不要為了調(diào)優(yōu)而調(diào)優(yōu)?。?!盲目調(diào)優(yōu),風(fēng)險遠大于收益!?。?程序性...

    ad6623 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<