日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java cpu高_Java中的CPU占用高和内存占用高的问题排查

發(fā)布時間:2025/3/12 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java cpu高_Java中的CPU占用高和内存占用高的问题排查 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

下面通過模擬實例分析排查Java應用程序CPU和內存占用過高的過程。如果是Java面試,這2個問題在面試過程中出現(xiàn)的概率很高,所以我打算在這里好好總結一下。

1、Java CPU過高的問題排查

舉個例子,如下:

package?com.classloading;

public?class?Test?{

static?class?MyThread?extends?Thread?{

public?void?run()?{?//?死循環(huán),消耗CPU

int?i=0;

while?(true)?{

i++;

}

}

}

public?static?void?main(String?args[])?throws?InterruptedException?{

new?MyThread().start();

Thread.sleep(10000000);

}

}

使用top命令查看占用CPU過高的進程。如下圖所示。

查看進程6102下線程的占用情況,如下圖所示。

使用如下命令將6122轉換為16進制表示,如下:

導出CPU占用高進程的線程棧。命令如下:

jstack?pid>>java.txt

內容如下:

mazhi@mazhi:~$?cat?java.txt

Attaching?to?remote?server?pid,?please?wait...

2021-02-23?15:38:18

Full?thread?dump?Java?HotSpot(TM)?64-Bit?Server?VM?(25.192-b12?mixed?mode):

"Attach?Listener"?#10?daemon?prio=9os_prio=0tid=0x00007f4ee0001000nid=0x1956runnable?[0x0000000000000000]

java.lang.Thread.State:?RUNNABLE

//?這是0x17ea線程,也是占用CPU最高的線程

"Thread-0"?#9?prio=5os_prio=0tid=0x00007f4f180d6000nid=0x17earunnable?[0x00007f4f044da000]

java.lang.Thread.State:?RUNNABLE

at?com.cpuhigh.Test$MyThread.run(Test.java:8)??//?這里指示第8行,則正是死循環(huán)的代碼開始

...

導出的堆棧信息有線程的狀態(tài)(一般要找RUNNABLE狀態(tài))和調用堆棧結合來查找問題。線程dump分析:線程dump分析主要目的是定位線程長時間停頓的原因

2、Java 內存過高的問題排查

舉個例子如下:

package?com.classloading;

import?java.util.ArrayList;

import?java.util.List;

public?class?Test?{

private?static?final?int?UNIT_MB=1024*?1024;

public?static?void?main(String?args[])?throws?InterruptedException{

Listx=newArrayList();

int?i=0;

while(i<1000){

x.add(new?byte[UNIT_MB]);

i++;

}

Thread.sleep(1000000000);

}

}

通過jmap dump內存快照。 如果是線上環(huán)境,注意dump之前必須先將流量切走,否則大內存dump是直接卡死服務。

命令行輸入:

jmap?-histo|?head?-20

就可以查看某個pid的java服務占用內存排名前20的類,如下圖所示。

可以看到,占用內存最多的是byte字節(jié)數(shù)組,共有1008個實例。

jmap 還有一個指令可以把整個內存情況轉成文件形式保存下來,如下:

jmap-dump:format=b,file=filename.bin

執(zhí)行命令如下圖所示。

可以在JVM啟動時設置,如果發(fā)生OOM,則dump出文件。命令如下:

-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/tmp/heapdump.hprof

如果快照文件不大,可以下載到本地,然后通過 MAT 分析,也可以在線分析( https://fastthread.io/ );如果快照文件很大,可以在服務器上直接分析,使用的命令是:

jhat?dump.hprof

jhat也是jdk內置的工具之一。主要是用來分析java堆的命令,可以將堆中的對象以html的形式顯示出來,包括對象的數(shù)量,大小等等,并支持 對象查詢語言 。命令執(zhí)行后如下圖所示。

訪問如下圖所示。

其中的Show heap histogram就會顯示對象占用內在的大小。如下圖所示。

【責任編輯:龐桂玉 TEL:(010)68476606】

點贊 0

總結

以上是生活随笔為你收集整理的java cpu高_Java中的CPU占用高和内存占用高的问题排查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。