国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JVM問題排查

這篇具有很好參考價值的文章主要介紹了JVM問題排查。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文詳細說明了Java應用運行過程中幾種常見的JVM相關問題,并給出了問題排查步驟。

一、堆中OOM

現象:Java線程負載過高,JVM內存幾乎占滿,甚至拋出java.lang.OutOfMemoryError錯誤。

思路:通過jmap能查看到對內存中實例,可以查看到哪些類的實例比較多,排查出OOM原因。

工具:jmap

步驟

1.查看實例信息:

jmap -histo 14660  #查看歷史生成的實例
jmap -histo:live 14660  #查看當前存活的實例,執(zhí)行過程中可能會觸發(fā)一次full gc

2.查看堆信息:jmap -heap

JVM問題排查,JVM

3.堆內存dump下來:

(1)jmap -dump:format=b,file=eureka.hprof 14660

(2)使用jvisualvm命令工具導入該dump文件分析

JVM問題排查,JVM

二、死鎖排查

現象:多個線程處于死鎖狀態(tài),無法再正常執(zhí)行。

背景:當兩個線程互相加了對方所依賴的鎖時就會進入死鎖狀態(tài),例如執(zhí)行以下代碼會進入死鎖狀態(tài):

public class Test1 {
    public static void main(String[] args) {
        Object lock = new Object();
        Object lock1 = new Object();
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock) {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock1) {

                    }

                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock1) {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock) {

                    }

                }
            }
        }).start();
    }
}

思路:通過jmap能看到所有線程的狀態(tài),但線程狀態(tài)處于blocked時候就是被加鎖的狀態(tài)中。

工具:jmap

步驟

  1. jps 查看進程號

  2. 用jstack 查找死鎖狀態(tài)中線程。

JVM問題排查,JVM

"Thread-1" 線程名

tid=0x000000079582bc98 線程id

nid=0x3e03 線程對應的本地線程標識nid

java.lang.Thread.State: BLOCKED 線程狀態(tài)

三、CPU飆升

現象:JVM的CPU飆升

思路:通過top查看出占用最大的java線程id,再通過命令top -Hp找到該線程下關聯(lián)的進程id,找到占用cpu最高的線程id,將其轉換為十六進制,在通過jstack來查看進程狀態(tài)

工具:top+jstack

步驟

  1. 用top命令查找出CPU占用最大的java進程和下面的線程;

查找CPU占用最高的進程:top 查找該進程下面的線程:top -Hp <java_pid>,可以看到該進程下所有子線程,可以找到占用CPU最高的線程Id,可以用命令:printf "%x\n" <線程id> 將十進制線程id轉為十六進制,便于后面jstack命令使用打印GC日志:jstat -gc <java_pid> 5000

  1. 用jstack查找出對應線程的日志信息;

通過進程id查看棧內信息:jstack <java_pid> | grep <線程id十六進制值> -A 30(-A 30表示向下打印30行)

JVM問題排查,JVM

總結:cpu飆升可能的原因大概為:

  1. 代碼存在死循環(huán),導致消耗cpu;

  2. 代碼一直在創(chuàng)建大對象,導致頻繁GC,這個時候內存占用率也會很高;

四、頻繁Full GC

問題說明:系統(tǒng)中某服務為圖方便緩存使用一個hashmap,運行過程中會不斷往里面放緩存數據,但是沒有考慮這個map的容量問題,結果這個緩存map越來越大,一直占用著老年代的很多空間,時間長了就會導致full gc非常頻繁,這就是一種內存泄漏,對于一些老舊數據沒有及時清理導致一直占用著寶貴的內存資源,時間長了除了導致full gc,還有可能導致OOM。

這種情況完全可以考慮采用一些成熟的JVM級緩存框架來解決,比如guava、ehcache等自帶一些LRU數據淘汰算法的框架來作為JVM級的緩存。

工具:jstat

步驟

  1. jstat -gc 可以評估程序內存使用及GC壓力整體情況

JVM問題排查,JVM

  • S0C:第一個幸存區(qū)的大小,單位KB
  • S1C:第二個幸存區(qū)的大小
  • S0U:第一個幸存區(qū)的使用大小
  • S1U:第二個幸存區(qū)的使用大小
  • EC:伊甸園區(qū)的大小
  • EU:伊甸園區(qū)的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法區(qū)大小(元空間)
  • MU:方法區(qū)使用大小
  • CCSC:壓縮類空間大小
  • CCSU:壓縮類空間使用大小
  • YGC:年輕代垃圾回收次數
  • YGCT:年輕代垃圾回收消耗時間,單位s
  • FGC:老年代垃圾回收次數
  • FGCT:老年代垃圾回收消耗時間,單位s
  • GCT:垃圾回收消耗總時間,單位s

優(yōu)化思路:簡單來說就是盡量讓每次Young GC后的存活對象都留存在年輕代里,盡量別讓對象進入老年代,盡量減少Full GC的頻率,避免頻繁Full GC對JVM性能的影響。

JVM參數說明:

-Xms1536M -Xmx1536M -Xmn512M -Xss256K -XX:SurvivorRatio=6  -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M 
-XX:+UseParNewGC  -XX:+UseConcMarkSweepGC  -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly 

JVM問題排查,JVM

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-699807.html

到了這里,關于JVM問題排查的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【JVM故障問題排查心得】「Java技術體系方向」Java虛擬機內存優(yōu)化之虛擬機參數調優(yōu)原理介紹

    【JVM故障問題排查心得】「Java技術體系方向」Java虛擬機內存優(yōu)化之虛擬機參數調優(yōu)原理介紹

    本文主要針對于綜合層面上進行分析JVM優(yōu)化方案總結和列舉調優(yōu)參數計劃。主要包含: 調優(yōu)之逃逸分析(棧上分配) 調優(yōu)之線程局部緩存(TLAB) 調優(yōu)之G1回收器 -XX:+DoEscapeAnalysis 逃逸分析(Escape Analysis) 逃逸分析的基本行為就是分析對象動態(tài)作用域:當一個對象在方法中被定

    2024年01月25日
    瀏覽(20)
  • jvm堆外內存排查詳解

    jvm堆外內存排查詳解

    內存泄漏想必大家并不陌生,對于jvm的內存泄漏,有很多排查手段和方便的排查工具,例如MAL,但是對于非jvm的內存,如直接內存的使用,排查起來較為麻煩,下面介紹一下相關的排查手段 在一次內存檢查的過程中,意外發(fā)現在linux的java進程內存占用,遠高于jvm的內存設定最

    2024年02月08日
    瀏覽(34)
  • 【JVM】Java內存泄露的排查思路?

    【JVM】Java內存泄露的排查思路?

    Java內存泄露(Memory Leak)是指在Java程序中,無用的對象占用了 堆內存 ,但無法被垃圾回收器回收釋放,從而導致可用內存逐漸減少,最終可能導致內存耗盡或性能下降的問題。 說明一般對于內存泄漏。都是針對 堆 的。 程序一般出現內存泄漏會有 兩個狀態(tài) 一是一啟動導致

    2024年02月13日
    瀏覽(24)
  • 【JVM】CPU飆高排查方案與思路

    【JVM】CPU飆高排查方案與思路

    1.使用 top命令 查看占用 cpu的情況 2.通過top命令查看后,可以查看是哪一個進程占用cpu較高,上圖所示的進程為:40940 3.查看進程中的線程信息 4.可以根據進程 id 找到有問題的線程,進一步定位到問題代碼的源碼行號 因為根據進程ID 找到的線程id顯示的是16進制,所以需要將查

    2024年02月13日
    瀏覽(30)
  • JVM筆記 —— 出現內存溢出錯誤時時如何排查

    JVM筆記 —— 出現內存溢出錯誤時時如何排查

    內存溢出錯誤分為StackOverflowError和OutOfMemoryError,前者是棧中出現溢出,后者一般是堆或方法區(qū)出現溢出,簡稱OOM 1. 棧溢出 StackOverflowError 棧溢出一般都是因為沒有正確的結束遞歸導致的,無限遞歸導致超出棧內存(-Xss)限制時就會拋出StackOverflowError。這種情況直接根據異常

    2024年02月13日
    瀏覽(24)
  • JVM-Cpu飆升排查及解決

    https://blog.csdn.net/m0_37542440/article/details/123679011 1. 問題情況 在服務器上執(zhí)行某個任務時,系統(tǒng)突然運行緩慢,top 發(fā)現cpu飆升,一度接近100%,最終導致服務假死。 2. 問題排查 1. 執(zhí)行 “top” 命令:查看所有進程占系統(tǒng)cpu的排序,極大可能排第一的就是自己的java進程,pid就是進

    2024年02月15日
    瀏覽(21)
  • jvm內存溢出排查(使用idea自帶的內存泄漏分析工具)

    jvm內存溢出排查(使用idea自帶的內存泄漏分析工具)

    想分析堆內存溢出,一定在運行jar包時就寫上參數 -XX:+HeapDumpOnOutOfMemoryError ,可以看我之前關于如何運行jar包的文章。若你沒有寫。可以寫上參數,重啟你的項目,等你的項目發(fā)生下一次堆內存溢出異常,在運行的同級文件夾,將產生類似這樣一個文件 java_pid74935.hprof ,若你

    2024年02月09日
    瀏覽(30)
  • Java線上故障排查(CPU、磁盤、內存、網絡、GC)+JVM性能調優(yōu)監(jiān)控工具+JVM常用參數和命令

    Java線上故障排查(CPU、磁盤、內存、網絡、GC)+JVM性能調優(yōu)監(jiān)控工具+JVM常用參數和命令

    根據服務部署和項目架構,從如下幾個方面排查: (1)運用服務器:排查內存,cpu,請求數等; (2)文件圖片服務器:排查內存,cpu,請求數等; (3)計時器服務器:排查內存,cpu,請求數等; (4)redis服務器:排查內存,cpu,連接數等; (5)db服務器:排查內存,cpu,連接數

    2024年02月07日
    瀏覽(29)
  • CPU飆升 頻繁GC排查-使用jmap histro命令來查看JVM中對象的直方圖

    CPU飆升 頻繁GC排查-使用jmap histro命令來查看JVM中對象的直方圖

    jmap是Java Virtual Machine Tool的一部分,它允許您生成JVM堆轉儲文件并執(zhí)行各種診斷操作??梢允褂胘map histro命令來查看JVM中對象的直方圖。 以下是使用jmap histro命令的語法: 參數pid是JVM進程的ID。請注意,您需要具有足夠的權限才能執(zhí)行此命令。 執(zhí)行上述命令后,您將獲得JVM堆

    2024年01月19日
    瀏覽(30)
  • 線上FullGC問題排查實踐——手把手教你排查線上問題

    線上FullGC問題排查實踐——手把手教你排查線上問題

    作者:京東科技 韓國凱 問題起因是我們收到了jdos的容器CPU告警,CPU使用率已經達到104% 觀察該機器日志發(fā)現,此時有很多線程在執(zhí)行跑批任務。正常來說,跑批任務是低CPU高內存型,所以此時考慮是FullGC引起的大量CPU占用(之前有類似情況,告知用戶后重啟應用后解決問題

    2024年02月02日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包