當前位置:編程學習大全網 - 源碼下載 - 通過top和jstack確定哪些線程耗盡了CPU?這些線程在做什麽

通過top和jstack確定哪些線程耗盡了CPU?這些線程在做什麽

背景

有時,線上集群load會突然飆升,無法響應正常請求。

那麽引起load飆升的線程究竟在做什麽?哪些線程霸占了CPU?可以通過top和jstack命令進行定位。

2. 定位步驟

1. 使用終端1進入目標機器,執行top命令,默認是進程視圖,其中PID是進程號,截圖如下:

在這裏,我們只能看到java進程占用CPU達到115%,那麽究竟是那些線程非常耗CPU呢?

2. 由於我們要看到線程,在終端1,按下“H”鍵或者“shift+h”,top視圖會切換到線程視圖,其中PID是線程號,截圖如下:

可以發現紅框內的線程的CPU使用率非常高,占用CPU時間達到1秒左右,顯然不正常,但是這些線程在做什麽?

3.?

打開終端2,使用jstack命令輸出這壹時刻的線程棧,保存到文件,命名為jstack.log。註意:輸出線程棧和保存top命令快照盡量同時進行。

4. 由於jstack.log文件記錄的線程ID是16進制,需要將top命令展示的線程號轉換為16進制,以15100為例,在linux下輸入命令:printf 0x%x 15100,得到15100的十六進制為0x3afc

5. 在jstack.log中搜索0x3afc關鍵字,可以清晰看到該線程在做刷新地址列表,如下圖:

3. 總結

以前碰到集群load飆升時,有時會束手無策,不知從何查起。以後再發生類似問題時,可以使用這個方法,看下究竟是那些線程在長時間占用CPU,盡快定位問題和解決問題。

  • 上一篇:java 基本編程~答的好的話加到100分!
  • 下一篇:記錄壹下前端使用CryptoJS的幾種加密方式
  • copyright 2024編程學習大全網