重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
Java進程CPU占用率100%是什么問題導致的?很多人都不太了解,今天小編為了讓大家更加了解CPU占用率100%的問題,所以給大家總結了以下內容,一起往下看吧。
100%指的是占用了CPU一個核心,兩個核心是200%,以此類推。
CPU占用率及對應進程ID(pid)可以通過top命令確定,在top界面按 c (顯示完整的命令行參數),按 1 (顯示每個核心的統計數據)。(推薦:Java教程)
這個問題最常見的有以下幾種可能:
1、堆內存不足導致頻繁Full GC
可以通過兩個命令確定
sudo jmap -heap pid 查看堆內存的消耗情況
sudo jstat -gc pid interval count 查看GC情況,示例:sudo jstat -gc 5746 3000 5 代表查看5746進程的GC情況、每隔3000毫秒打印一次、總共打印5次。如果FGC/FGCT增長明顯,說明Full GC很頻繁。
后續處理:
如果情況緊急,那得馬上重啟Java應用進程不緊急的話需要獲取相關信息用于分析為什么堆內存被消耗完了,可能有內存泄漏問題,可以用 1)sudo jmap -histo pid | head -n 20 查看Java對象的占用統計信息,2)sudo jmap -dump:live,format=b,file=heap.bin pid 把堆轉儲導出到本地文件,可以用 Eclipse MAT 工具分析內存泄漏
2、代碼實現問題
思路:追查具體是哪個線程占用了CPU,1)先查到本地系統CPU占用率高的線程ID,2)找到對應的Java線程及線程堆棧
top -H -p pid 查看某個進程里面哪些線程占用了CPU,把對應的線程ID拷貝下來,轉為十六進制【IDEA》Tools》Groovy Console》println Long.toHexString(1234) 即可完成轉換】。
sudo jstack -l -F pid | less 獲取Java線程堆棧,用十六進制的本地線程ID搜索,會在某一行的nid處找到對應的線程。查看Java線程堆棧,找到對應的Java類及行號,然后閱讀代碼查找可能的問題原因。
jstack堆棧信息里tid/nid的說明
https://docs.oracle.com/javas...
The thread dump consists of the thread stack, including the thread state, for all Java threads in the virtual machine. The header line contains the following information about the thread: - Thread ID (tid), which is the address of a thread structure in memory. - ID of the native thread (nid).
以上就是Java進程CPU占用率100%是什么問題導致的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎來創新互聯行業資訊!