JVM系列(2) jmap mat實戰記憶體溢位

2022-08-23 02:36:14 字數 1553 閱讀 1602

1. jps -l

####2. jinfo用法(結合jps -l查到程序id)

1)、檢視最大堆記憶體:jinfo -flag maxheapsize 23789(程序id)

比如查出1中的tomcat的最大堆記憶體設定:

!(2)、檢視手動修改過的引數:jinfo -flags 23789(程序id)

有些是我們自己設定的,有些是tomcat的shell指令碼自己設定的:

3)、檢視gc垃圾**器:

####3. jstat用法

1)、jstat -class 23789:檢視類載入的個數

!(2)、jstat -gc 23789 1000 10:每個一秒列印一次23789程序的gc結果,共列印10次。

輸出結果解釋:

s0c、s1c、s0u、s1u:s0和s1的總量與使用量

ec、eu:eden區總量與使用量

oc、ou:old區總量與使用量

mc、mu:metaspace區總量與使用量

ccsc、ccsu:壓縮類空間總量與使用量

ygc、ygct:younggc次數與時間

fgc、fgct:fullgc的次數與時間

gct:總的gc時間

1. 記憶體溢位自動匯出,vm中加入如下兩個引數,第二個表示映像檔案存放在當前目錄。

2. jmap匯出映像檔案

1)、jps -l 檢視pid

就個人在實際工作當中的體會,記憶體溢位發生的概率其實沒那麼大,一旦出現往往都是由於以下幾個方面導致:

1)、**編寫不規範,某些迴圈或其它業務邏輯導致生成大量例項;

2)、伺服器分配記憶體不達標,這個遇到的其實最多。

ps:以我前公司的某大型電網客戶為例,他們的伺服器都是自己機房分配的(有錢),應用伺服器的記憶體往往32g起步,64g常規,我們按照一套標準為伺服器分配堆記憶體,首先,伺服器上盡量不裝其他軟體,只部署應用服務,讓記憶體得到最大利用,其次,分配伺服器完整記憶體的70%-80%為該應用服務的堆記憶體,64g的話大概就分配45g-52g左右,幾年下來其實從未出現過堆記憶體溢位的問題。

當然,這不是絕對的,但充分說明了在**層面穩定的情況下,解決堆記憶體溢位最好的方式就是……有錢。→_→

jvm系列文章之jvm 記憶體模型

1.jvm記憶體模型按照執行緒私有與否劃分為兩類,執行緒私有類記憶體 執行緒棧,程式計數器,本地方法棧 和執行緒共享記憶體 堆,方法區or元空間 兩大類 執行緒棧 當類開始執行main方法後,位元組碼執行引擎就會為當前執行緒分配一塊記憶體區域,該區域詳細又可以根據執行的方法為main方法的後續方法分...

JVM系列 1 變數

這段時間一直在看jvm相關的書籍,雖然有點難,至少到目前為止還沒有放棄。寫這篇文章的目的 當做自己這段時間學習的小回顧。本章主要通過幾個 片段,分析下區域性變數表與運算元棧之間的資料傳遞關係,重點講解iload,istore,iconst iadd命令 public void test1 publi...

jvm系列 一 jvm記憶體區域與溢位

string s2 new string jiajun string s6 new string jiajun system.out.println s2 s6 string s6 new string jiajun string s1 jiajun system.out.println s1 s6...