公司報表分析系統已經運行了一年多,最近收到服務器內存警告信息內存耗盡,第一時間着手排查問題,記錄下排查內存耗盡問題整個過程使用到的命令。
第一步查看內存使用情況:
free -m 命令:已M單位顯示服務器實際內存使用情況,如圖:

第1行mem數據:
total內存總數: 7864
used已經使用的內存數: 6527
free空閑的內存數: 1337
shared當前已經廢棄不用
buffers內存數: 62
cached內存數:874
第2行-/+buffers/cache數據,顯示的是實際被使用掉的內存(used)以及實際剩余的內存(free):
used實際使用內存數:5590,used=(第1行)used-(第2行)free
free實際剩余內存數:2273,free=(第1行)free+(第1行)buffers+(第1行)cached
第3行swap數據為虛擬內存(略過)
buffer 與cache 的區別:A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use
buffer:即將要被寫入磁盤,而cache:被從磁盤中讀出來
緩存cached是把讀取過的數據保存起來,重新讀取時(找到需要的數據)就不要去讀硬盤了。
緩沖buffers是根據磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統性能。
第二步查看JVM內存情況:GC情況
jstat -gc 16699 1000 命令:
16699為jvm的進程號
1000為1000毫秒,輸出一次gc信息

顯示內容說明如下(部分結果是通過其他其他參數顯示的,暫不說明):
S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
S0U:年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
S1U:年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
EC:年輕代中Eden(伊甸園)的容量 (字節)
EU:年輕代中Eden(伊甸園)目前已使用空間 (字節)
OC:Old代的容量 (字節)
OU:Old代目前已使用空間 (字節)
PC:Perm(持久代)的容量 (字節)
PU:Perm(持久代)目前已使用空間 (字節)
YGC:從應用程序啟動到采樣時年輕代中gc次數
YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)
FGC:從應用程序啟動到采樣時old代(全gc)gc次數
FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啟動到采樣時gc用的總時間(s)
第三步查看堆棧信息:查看JVM內存中數據分布情況
第四步查看Jvm線程狀況:
jstack 16699:
待續。。。。。。
