系統(tǒng)運(yùn)維問(wèn)題排查-java內(nèi)存過(guò)高分析及說(shuō)明
1、查看內(nèi)存使用情況
使用top查看進(jìn)程使用內(nèi)存情況,shift+m讓內(nèi)存使用率按照降序排序,shift+p讓cpu使用率按照降序排序。

2、查看某個(gè)進(jìn)程的線(xiàn)程情況
ps p $pid -L -o pcpu,pmem,pid,tid,time,tname,cmd
3、執(zhí)行 jmap $pid命令觀(guān)察內(nèi)存使用情況

4、執(zhí)行 jstat -gcutil $pid 5s 命令查看內(nèi)存使用情況

結(jié)果列含義:
- S0 — Heap上的 Survivor space 0 區(qū)已使用空間的百分比
- S1 — Heap上的 Survivor space 1 區(qū)已使用空間的百分比
- E — Heap上的 Eden space 區(qū)已使用空間的百分比
- O — Heap上的 Old space 區(qū)已使用空間的百分比
- P — Perm space 區(qū)已使用空間的百分比
- YGC — 從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生 Young GC 的次數(shù)
- YGCT– 從應(yīng)用程序啟動(dòng)到采樣時(shí) Young GC 所用的時(shí)間(單位秒)
- FGC — 從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生 Full GC 的次數(shù)
- FGCT– 從應(yīng)用程序啟動(dòng)到采樣時(shí) Full GC 所用的時(shí)間(單位秒)
- GCT — 從應(yīng)用程序啟動(dòng)到采樣時(shí)用于垃圾回收的總時(shí)間(單位秒)
- GCT 是YGCT 和FGCT的時(shí)間總和。
5、執(zhí)行 jmap –heap $pid 命令
查看各內(nèi)存區(qū)域的設(shè)置
6、執(zhí)行 jmap -histo:live $pid 命令
查看每個(gè) class 的實(shí)例數(shù)目、內(nèi)存使用率和類(lèi)全名。每分鐘執(zhí)行一次,連續(xù)執(zhí)行 5 次

7、獲取dump文件
jmap -dump:live format=b,file=./dump.bin $pid
8、查看進(jìn)程堆棧信息
jstack -l $pid> /usr/local/temp/jstack.log

JSTACK命令打印解析
日志格式
- "Keep-Alive-Timer"代表線(xiàn)程的名稱(chēng)。在實(shí)際開(kāi)發(fā)中,要取一個(gè)和業(yè)務(wù)相關(guān)、見(jiàn)名知意的名字,便于排查問(wèn)題。
- “prio=8”表示線(xiàn)程的優(yōu)先級(jí)。
- “os_prio=0”表示操作系統(tǒng)級(jí)別的優(yōu)先級(jí)。
- “tid=0x000055868e1e9000”表示線(xiàn)程id。
- “nid=0x394f”表示操作系統(tǒng)映射的線(xiàn)程id。
- “0x00007fabd4f44000”表示線(xiàn)程棧的起始地址。
具體分析
waiting to lock <0x00000000d6349040>,即試圖在地址為0x00000000d6349040所在的對(duì)象獲取鎖;而該對(duì)象卻被線(xiàn)程加了鎖(locked <0x00000000d6349040>)。
- waiting on condition [0x00007fabd5b4e000]:說(shuō)明正在等待某個(gè)條件觸發(fā)。
- waiting for monitor entry [0x000000001bbcf000]:說(shuō)明該線(xiàn)程正在等待獲取鎖。
其中:java.lang.Thread.State: WAITING (parking):一直等那個(gè)條件發(fā)生;
java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定時(shí)的,那個(gè)條件不到來(lái),也將定時(shí)喚醒自己。MEM。
注意:jmap和jstack需要使用與進(jìn)程一致的用戶(hù)才能執(zhí)行
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 自旋鎖(spinlock)相關(guān)知識(shí)總結(jié)
這篇文章主要介紹了Java 自旋鎖(spinlock)相關(guān)知識(shí)總結(jié),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-02-02
Java同時(shí)處理多個(gè)數(shù)據(jù)的常見(jiàn)方法
在Java中,同時(shí)處理多個(gè)數(shù)據(jù)通常涉及多線(xiàn)程、并發(fā)編程或異步編程,這里我將提供一個(gè)使用多線(xiàn)程的示例,因?yàn)槎嗑€(xiàn)程是處理多個(gè)數(shù)據(jù)并行的常見(jiàn)方式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-11-11
JavaWeb 實(shí)現(xiàn)多個(gè)文件壓縮下載功能
文件下載時(shí),我們可能需要一次下載多個(gè)文件,批量下載文件時(shí),需要將多個(gè)文件打包為zip,然后再下載。本文給大家分享實(shí)現(xiàn)思路及具體實(shí)現(xiàn)代碼,對(duì)javaweb實(shí)現(xiàn)文件壓縮下載功能感興趣的朋友一起學(xué)習(xí)吧2017-07-07
SpringBoot Redisson 集成的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot Redisson 集成的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
spring-data-jpa使用自定義repository來(lái)實(shí)現(xiàn)原生sql
這篇文章主要介紹了在spring-data-jpa中使用自定義repository來(lái)實(shí)現(xiàn)原生sql,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Android設(shè)備如何保證數(shù)據(jù)同步寫(xiě)入磁盤(pán)的實(shí)現(xiàn)
這篇文章主要介紹了Android設(shè)備如何保證數(shù)據(jù)同步寫(xiě)入磁盤(pán)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

