本文目錄一覽:
java佔用cpu高?
java進程佔用CPU過高常見的兩種情況:
1,代碼中有死循環或者接近死循環的操作
2,快速創建大量臨時變數,導致頻繁觸發gc回收
Java的多線程和CPU
CPU對於各個線程的調度是隨機的(分時調度),而在Java中,JVM負責線程的調度,可更好地分配CPU的使用權。對於線程的調度一般有兩種模式,分時調度和搶佔式調度。分時調度是按照順序平均分配;搶佔調度是按照優先順序來進行分配。
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
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/180127.html