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

聊聊怎么排查堆內存溢出

存儲 存儲軟件
年輕代是所有新對象產生的地方。當年輕代內存空間被用完時,就會觸發垃圾回收。這個垃圾回收叫做Minor GC。

[[325399]]

 你知道的越多,你不知道的越多

上次給老公們說過了死循環cpu飆高的排查過程,今天就帶著老公們看看堆內存溢出我們一般怎么排查的。

  • cpu100%排查文章

在排查之前,我想jvm的基礎知識大家應該都是了解了的吧?

老婆我就是不了解,人家要你說給我聽。

行行行,誒真實拿你們沒辦法,那我就帶大家回溫一下JVM的內存模型(這玩意跟JAVA內存模型JMM可不一樣,不要記錯了)

今天我就直說堆,因為溢出是發送在堆中的。

JVM堆內存被分為兩部分:年輕代(Young Generation)和老年代(Old Generation)。

年輕代年輕代是所有新對象產生的地方。當年輕代內存空間被用完時,就會觸發垃圾回收。這個垃圾回收叫做Minor GC。

年輕代

被分為3個部分——Enden區和兩個Survivor區。

年輕代空間的要點:

  1. 大多數新建的對象都位于Eden區。
  2. 當Eden區被對象填滿時,就會執行Minor GC,并把所有存活下來的對象轉移到其中一個survivor區。
  3. Minor GC同樣會檢查存活下來的對象,并把它們轉移到另一個survivor區。這樣在一段時間內,總會有一個空的survivor區。
  4. 經過多次GC周期后,仍然存活下來的對象會被轉移到年老代內存空間,通常這是在年輕代有資格提升到年老代前通過設定年齡閾值來完成的。

年老代

年老代內存里包含了長期存活的對象和經過多次Minor GC后依然存活下來的對象,通常會在老年代內存被占滿時進行垃圾回收。

GC種類

Major GC

老年代的垃圾收集叫做Major GC,Major GC通常是跟full GC是等價的,收集整個GC堆。

分代GC

  • Young GC:只收集年輕代的GC
  • Old GC:只收集年老代的GC(只有CMS的concurrent collection是這個模式)
  • Mixed GC:收集整個young gen以及部分old gen的GC(只有G1有這個模式)

Full GC

Full GC定義是相對明確的,就是針對整個新生代、老生代、元空間(metaspace,java8以上版本取代perm gen)的全局范圍的GC。

 

老公們可以從上圖看到年輕代分為了一個Eden區和兩個survivor區(S1,S2),survivor區同一時間只會有一個滿一個空,交替的。

然后就是GC到一定的閾值到老年代,今天不講永久代所以忽略Mataspace。

老婆:那怎么分析呢?

今天我就用一個JDK自帶的工具jvisualvm來給大家演示一波怎么操作的,因為這玩意誰都有,你去命令行敲一下jvisualvm就出來了(Mac是這樣的,不知道Windows是怎么樣子的)。

操作界面:

 

一般什么情況可能是出現了溢出呢?

超時,不進行服務,服務掛掉,接口不在服務這樣的異常問題。

那模擬也很簡單,我寫個循環一直往List丟數據,不使用list就能看到現象了

 

老公們可以看到圖形化界面還是很清晰明了的,這個是Visual GC的插件

 

大家點擊菜單欄的插件,然后安裝就好了,安裝完了記得點擊激活。

 

可以看到不釋放,堆空間就一直上去,直到OOM(out of memory)

 

這個時候我們就dump下來堆信息看看

 

會dump出一個這樣的hprof快照文件,可以用jvisualvm本身的系統去分析,我這里推薦MAT吧,因為我習慣這個了。

 

MAT :下載地址

下來好了我們可以看到mat已經分析了我們的文件

 

你看他就是個暖男,都幫我們分析出來了一個問題,我們點進去看看

 

他發現了是ArrayList的問題了,我們再往下看看

 

看到了嘛,具體代碼的位置都幫我們定位好了,那排查也就是手到擒來的事情了。

 

延伸點

上面我們使用工具jump了,那怎么去服務器上jump呢?

  1. jmap -dump:format=b,file=<dumpfile.hprof> <pid> 

有老公可能問了,不是所有的故障當時我們都在場的,無法及時jump,那也簡單

  1. -XX:+HeapDumpOnOutOfMemoryError 

配置這玩意之后,oom的時候會自動jump的,到時候拿快照分析一波就好了。

MAT的功能還有很多的,百度谷歌太多工具文了,我就不做重復的工作了,比如還可以排查對象的強弱引用,還可以查看引用鏈等等。

還有個只寫這么點的原因是有點晚了,頂不住了,最近不拍視頻也是因為事情多了,有點小忙,希望老公們體量,對了Redis的分布式鎖已經在安排的路上了。

我是敖丙,一個在互聯網茍且偷生的工具人。

責任編輯:武曉燕 來源: 三太子敖丙
相關推薦

2025-06-16 07:40:00

2018-04-17 14:41:41

Java堆內存溢出

2021-02-03 15:12:08

java內存溢出

2022-07-03 20:31:59

JVMJava虛擬機

2021-11-14 05:00:56

排查Sdk方式

2021-06-01 07:55:42

DockerEOFk8s

2020-08-27 21:36:50

JVM內存泄漏

2022-06-15 16:04:13

Java編程語言

2024-03-11 08:22:40

Java內存泄漏

2023-07-31 07:48:43

Java內存虛擬機

2013-08-02 10:06:36

Android內存溢出

2021-01-07 07:53:10

JavaScript內存管理

2019-04-01 14:39:32

Node.js故障排查

2024-09-09 09:41:03

內存溢出golang開發者

2022-06-27 08:31:29

數據溢出無符號

2015-03-30 11:18:50

內存管理Android

2020-11-23 08:53:34

堆Heap

2021-08-24 08:01:15

死鎖工具多線編程

2012-05-15 02:04:22

JVMJava

2022-11-30 08:19:15

內存分配Go逃逸分析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本欧美在线视频 | 在线视频日韩 | 一级特黄a大片 | 国产在线精品一区二区 | 欧美日韩久 | 91亚洲精选 | 免费观看日韩精品 | 欧美成人二区 | 91精品久久久久久久久 | 日本黄色激情视频 | 久久毛片网站 | 久久久国产精品 | 色爱综合网 | 羞羞视频在线网站观看 | 日日夜夜免费精品 | 日本不卡免费新一二三区 | 韩日有码| 亚洲精品一区二区三区在线 | 成人免费在线小视频 | 日日噜噜噜夜夜爽爽狠狠视频, | 久久久久久国产精品免费免费 | 亚洲精品乱码久久久久v最新版 | 国产一区欧美 | 香蕉久久a毛片 | 国产成人精品一区二区三 | 欧美在线观看一区二区 | 国产在线高清 | 美女操网站 | 国产h在线 | 一级毛片大全免费播放 | 日本在线一区二区三区 | 天天草天天操 | 国产日韩精品一区二区 | 午夜精品久久久久久久久久久久久 | 欧美激情亚洲激情 | 日本天天操| 精品在线看 | 午夜免费视频 | 久久91av| 一区二区三区成人 | 欧美成人在线影院 |