記錄一次服務器內存耗盡排查過程使用到的命令


公司報表分析系統已經運行了一年多,最近收到服務器內存警告信息內存耗盡,第一時間着手排查問題,記錄下排查內存耗盡問題整個過程使用到的命令。

 

第一步查看內存使用情況:

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內存中數據分布情況

jmap -histo 16699命令:
16699為jvm進程號

 

第四步查看Jvm線程狀況:

jstack 16699:

 

待續。。。。。。


免責聲明!

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



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