Java服務運行時CPU飆升問題排查

一、前言

  服務器上某個服務CPU異常告警,CPU使用率飆升到幾十百分百,甚至達到百分之幾百。

二、排查步驟

1、top命令查看進程

  執行:top -c ,顯示進程運行信息列表。然後鍵入P (大寫p),進程按照CPU使用率排序。找到CPU消耗最高的進程,記錄進程的id(PID)。
在這裏插入圖片描述

2、找到進程中消耗最高的線程

  執行:top -Hp 進程id 命令(小寫p),查看java進程下的所有線程佔CPU的情況。記錄CPU消耗最高的線程id(PID)。

top -Hp 2077

3、線程PID轉爲十六進制

  將十進制的線程PID轉爲十六進制的數值,方法有多種。這裏介紹2種:
  1)printf命令
  在服務器上執行: printf “%x\n” 線程PID,可得到對應數字的十六進制。

printf "%x\n" 621

在這裏插入圖片描述
  2)計算器

4、查看線程在幹嘛

  使用jstack工具執行:jstack 進程ID | grep 線程ID(十六進制),查看線程的堆棧信息。然後根據堆棧信息查看對應代碼即可。

jstack 2077 | grep 26d

5、進一步分析

  第4步驟中,如果打印出的線程帶有"VM Thread",說明是GC線程。此時有可能是頻繁服務GC操作導致。
  1)jmap查看內存使用情況
   執行: -heap 進程ID,在線查看各年代內存使用情況
  2)導出dump日誌
   執行:jmap -dump:format=b,file=filename 進程ID,下載到本地,通過IDE可以打開,分析各類型對象創建情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章