內存溢出及Jvm監控工具


內存泄露與內存溢出

內存溢出 out of memory,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory。

內存泄露 memory leak,是指程序在申請內存后,無法釋放已申請的內存空間。一次內存泄露危害可以忽略,但內存泄露堆積后果很嚴重,無論多少內存,遲早會被占光。
memory leak會最終會導致out of memory!

內存溢出分類

堆內存溢出
堆內存中存在大量對象,這些對象都有被引用,當所有對象占用空間達到堆內存的最大值,就會出現內存溢出OutOfMemory:Java heap space
永久代溢出
類的一些信息,如類名、訪問修飾符、字段描述、方法描述等,所占空間大於永久代最大值,就會出現OutOfMemoryError:PermGen space

內存泄露檢測手段

Jdk/bin目錄下有很多檢測工具
圖形界面(需要更新測試機配置文件):
Jconsole
Jvisualvm
命令行工具:
Jstat –gcutil pid 1000 100
Jmap –histo pid | head -20
Jmap –heap pid

 1 [root@zhoucentos bin]# jmap -heap 2384   //打印java heap堆內存信息
 2 Attaching to process ID 2384, please wait...
 3 Debugger attached successfully.
 4 Client compiler detected.
 5 JVM version is 11.0-b15
 6 
 7 using thread-local object allocation.
 8 Mark Sweep Compact GC
 9 
10 Heap Configuration:
11    MinHeapFreeRatio = 40
12    MaxHeapFreeRatio = 70
13    MaxHeapSize      = 268435456 (256.0MB)
14    NewSize          = 131072000 (125.0MB)
15    MaxNewSize       = 131072000 (125.0MB)
16    OldSize          = 4194304 (4.0MB)
17    NewRatio         = 12
18    SurvivorRatio    = 8
19    PermSize         = 12582912 (12.0MB)
20    MaxPermSize      = 67108864 (64.0MB)
21 
22 Heap Usage:
23 New Generation (Eden + 1 Survivor Space):
24    capacity = 117964800 (112.5MB)
25    used     = 102007440 (97.28187561035156MB)
26    free     = 15957360 (15.218124389648438MB)
27    86.4727783203125% used
28 Eden Space:
29    capacity = 104857600 (100.0MB)
30    used     = 90339496 (86.15445709228516MB)
31    free     = 14518104 (13.845542907714844MB)
32    86.15445709228516% used
33 From Space:
34    capacity = 13107200 (12.5MB)
35    used     = 11667944 (11.127418518066406MB)
36    free     = 1439256 (1.3725814819335938MB)
37    89.01934814453125% used
38 To Space:
39    capacity = 13107200 (12.5MB)
40    used     = 0 (0.0MB)
41    free     = 13107200 (12.5MB)
42    0.0% used
43 tenured generation:
44    capacity = 137363456 (131.0MB)
45    used     = 40348976 (38.47978210449219MB)
46    free     = 97014480 (92.52021789550781MB)
47    29.373879469078005% used
48 Perm Generation:
49    capacity = 12845056 (12.25MB)
50    used     = 12656048 (12.069747924804688MB)
51    free     = 189008 (0.1802520751953125MB)
52    98.52855448820154% used

配置tomcat jvm參數

編寫接口腳本

跑5分鍾……

jvisualvm遠程連接虛擬機監控

可以看到堆內存到達了頂點,發生了垃圾回收卻沒有起作用。像這樣暴力的,哈哈


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM