1. java如何定位佔用CPU比較高的問題
一、確定消耗CPU的Java進程
備註:
1、jstack 輸出的堆棧信息,線程id對應的16進制為小寫,查找時要統一按照小寫方式查找
2、jstack輸出為當前瞬間的堆棧信息,如果遇到間斷性出現CPU高的問題時,需要多輸出幾次
從上面方式定位到代碼Test.main(Test.java:4)處導致了CPU偏高的問題,那我們查看下代碼具體如何實現的?
代碼實現:
public class Test {
public static void main(String[] args) {
while(true) {
}
}
}
從代碼層面看該處實現了一個死循環,所以導致了線程佔用CPU偏高的問題。
2. 哪些原因會造成java.exe佔用大量cpu資源
額,我知道的只有死循環,當一條線程在一個循環內,如果不間斷的跑這個循環,很容易就高內存
3. Java中CPU佔用過高問題如何解決
方法1
1.jps 獲取Java進程的PID。
2.jstack pid >> java.txt 導出CPU佔用高進程的線程棧。
3.top -H -p PID 查看對內應進程的哪個線程佔用CPU過高。
4.echo 「obase=16; PID」 | bc 將線程的PID轉換為容16進制,大寫轉換為小寫。
5.在第二步導出的Java.txt中查找轉換成為16進制的線程PID。找到對應的線程棧。
6.分析負載高的線程棧都是什麼業務操作。優化程序並處理問題。
方法2
1.使用top 定位到佔用CPU高的進程PID
top
通過ps aux | grep PID命令
2.獲取線程信息,並找到佔用CPU高的線程
ps -mp pid -o THREAD,tid,time | sort -rn
3.將需要的線程ID轉換為16進制格式
printf "%x\n" tid
4.列印線程的堆棧信息
jstack pid |grep tid -A 30