摘要:指的是占用了一個核心,兩個核心是,以此類推。占用率及對應進程可以通過命令確定,在界面按顯示完整的命令行參數,按顯示每個核心的統計數據。查看線程堆棧,找到對應的類及行號,然后閱讀代碼查找可能的問題原因。
100%指的是占用了CPU一個核心,兩個核心是200%,以此類推。
CPU占用率及對應進程ID(pid)可以通過top命令確定,在top界面按 c (顯示完整的命令行參數),按 1 (顯示每個核心的統計數據)。
這個問題最常見的有以下幾種可能:
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).
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73757.html
摘要:很顯然對于不同規模,不同功能的系統,這個問題無法一概而論。生產事件上報客服上報此類問題往往來自用戶投訴,最重要的就是問題現象的復現。線上問題處理的核心是快速修復。以上說的都是問題發生后的消極應對措施。 前言一線程序員在工作中經常需要處理線上的問題或者故障,但工作幾年下來發現,有些同事其實并不知道該如何去分析和解決這些問題,毫無章法的猜測和嘗試,雖然在很多時候可以最終解決問題,但往往也會浪費大...
摘要:發現這是的一個堆棧,前段時間正好解決過一個由于隊列引起的一次強如也發生內存溢出沒想到又來一出。因此初步判斷為大量線程執行函數之后互相競爭導致使用率增高,而通過對堆棧發現是和使用有關。 showImg(https://segmentfault.com/img/remote/1460000017395756?w=1816&h=1080); 前言 到了年底果然都不太平,最近又收到了運維報警:...
閱讀 3454·2021-11-22 12:00
閱讀 671·2019-08-29 13:24
閱讀 2905·2019-08-29 11:31
閱讀 2587·2019-08-26 14:00
閱讀 3185·2019-08-26 11:42
閱讀 2476·2019-08-23 18:31
閱讀 798·2019-08-23 18:27
閱讀 2844·2019-08-23 16:58