三步排查服务器中Java应用CPU飙高
创始人
2024-09-26 17:54:20
0

文章目录

    • 启动一个Java应用模拟CPU飙高
    • top 命令查询CPU占用率高的Java应用
    • 分析该进程下占用CPU高的线程
    • 将线程PID转换为16进制
    • jstack 跟踪线程的调用栈
    • 查看源码

jstack 介绍
jstack 是 JDK 提供的一个命令行工具,用于生成 Java 进程的线程快照。
线程快照包含了 Java 进程中所有线程的状态信息,如线程的名称、线程的状态(RUNNABLE、WAITING、BLOCKED 等)以及线程的调用栈。
通过分析 jstack 生成的线程快照,可以帮助您诊断诸如死锁、线程阻塞、CPU 使用率过高等与线程相关的问题。

启动一个Java应用模拟CPU飙高

写了一个普通Java应用模拟CPU飙高,将它启动起来
在这里插入图片描述

top 命令查询CPU占用率高的Java应用

输入top 命令进入top命令界面后,按大写字母 P将根据CPU占用率排序, 按大写字母M将根据内存占用率排序

 top 

查找CPU占用高的进程,复制进程PID 我这里是 461655
在这里插入图片描述

分析该进程下占用CPU高的线程

top -Hp {PID} 命令查看进程下的线程

 top -Hp 461656 

查找CPU占用高的线程,复制线程程PID 我这里是 461656
在这里插入图片描述

将线程PID转换为16进制

使用 printf “0x%x” {PID} 命令转换16进制

 printf "0x%x" 461656 

转为16进制后 0x70b58
在这里插入图片描述

jstack 跟踪线程的调用栈

jstack 是JDK提供的命令行工具,如果你配置了环境变量可以不用写全路径,没有环境变量就要加上你的JDK路径

 # jstack 进程PID   # |grep 0x70b58 过滤出该线程相关调用栈信息  # -A 50 输出后50行   /usr/local/jdk1.8.0_301/bin/jstack 461655 |grep 0x70b58 -A 50 

以下输出调用栈中,可以看到在App.java中main方法第10行调用了线程就一直处于 java.lang.Thread.State: RUNNABLE 执行状态
在这里插入图片描述

查看源码

根据调用栈信息查看源码,原来代码中在计算圆周率后800万位。非常消耗CPU资源。

在这里插入图片描述

App.java 文件内容

package org.github.zuuyao;  import java.math.BigDecimal; import java.math.RoundingMode;  public class App {     public static void main(String[] args) {         System.out.println("calculatePi!");         // 计算圆周率精确到小数点八百万位         BigDecimal bigDecimal = calculatePi(8000000);         System.out.println("pi Value : " + bigDecimal.toString());     }       /**      * 模拟CPU飙高      */     public static void simulation() {         while (true) {             // 什么都不执行,一直死循环。占用大量CPU资源         }     }      /**      * 计算圆周率      *      * @param decimalPlaces 圆周率小数点位数      * @return 计算结果      */     public static BigDecimal calculatePi(int decimalPlaces) {          BigDecimal pi = BigDecimal.ZERO;         BigDecimal sixteen = BigDecimal.valueOf(16);         BigDecimal one = BigDecimal.ONE;          for (int k = 0; k <= decimalPlaces; k++) {             BigDecimal kBig = BigDecimal.valueOf(k);             BigDecimal term = one.divide(sixteen.pow(k), decimalPlaces + 10, RoundingMode.HALF_UP);             term = term.multiply(                 BigDecimal.valueOf(4)                     .divide(BigDecimal.valueOf(8 * k + 1), decimalPlaces + 10, RoundingMode.HALF_UP)                     .subtract(BigDecimal.valueOf(2)                         .divide(BigDecimal.valueOf(8 * k + 4), decimalPlaces + 10,                             RoundingMode.HALF_UP))                     .subtract(BigDecimal.valueOf(1)                         .divide(BigDecimal.valueOf(8 * k + 5), decimalPlaces + 10,                             RoundingMode.HALF_UP))                     .subtract(BigDecimal.valueOf(1)                         .divide(BigDecimal.valueOf(8 * k + 6), decimalPlaces + 10,                             RoundingMode.HALF_UP))             );              pi = pi.add(term);         }          return pi.setScale(decimalPlaces, RoundingMode.HALF_UP);     }   }  

pom.xml 文件内容

   4.0.0    org.github.zuuyao   troubleshooting-demo   1.0-SNAPSHOT   jar    troubleshooting-demo   http://maven.apache.org         UTF-8                    ${artifactId}                     org.apache.maven.plugins         maven-jar-plugin                                                true                              org.github.zuuyao.App                                                   

相关内容

热门资讯

安卓系统怎么升级抖音,轻松实现... 亲爱的手机控们,你是不是也和我一样,对手机里的抖音APP爱不释手呢?不过,你知道吗?抖音APP也在不...
安卓系统下载taptap就好了... 你有没有发现,现在手机上玩游戏的体验越来越棒了?想要找到那些好玩的游戏,安卓系统的小伙伴们可要记得,...
emui8.1安卓系统视频,安... 亲爱的读者们,你是否曾在某个瞬间,被手机上流畅的视频播放所吸引?今天,就让我带你深入探索华为EMUI...
安卓系统中控安装carplay... 你有没有想过,在安卓手机上也能享受到苹果的CarPlay功能呢?没错,就是那个让iPhone用户爱不...
目前安卓系统永久会卡吗,永久卡... 你有没有发现,你的安卓手机有时候用着用着就卡了呢?是不是也在想,这安卓系统是不是就注定了要卡卡卡?别...
安卓系统能刷ios吗,安卓设备... 你有没有想过,安卓手机能不能刷成iOS系统呢?这可是个让人好奇心爆棚的问题!想象你的安卓手机突然变成...
安卓系统关机短信吗,一键轻松关... 你有没有想过,当你的安卓手机突然关机了,它会给你发条短信吗?这听起来像是科幻电影里的情节,但实际上,...
灵越属于安卓系统吗,安卓系统下... 你有没有想过,你的手机里那个叫做“灵越”的小家伙,它到底是不是安卓系统的忠实伙伴呢?今天,我们就来一...
安卓系统怎么把王者转区,安卓系... 你是不是也和我一样,沉迷于王者荣耀,却因为服务器的问题,想要把账号转到更近的服务器呢?别急,今天就来...
淡粉色的平板安卓系统,探索安卓... 你有没有发现,最近市面上出现了一种特别美腻的平板电脑,它的系统竟然是淡粉色的安卓系统!是不是瞬间觉得...
外星信号与系统和安卓,探索未知... 哇,你知道吗?最近科学家们在外太空的探索中又有了新的发现,这可是让人兴奋不已的事情呢!想象如果真的有...
安卓系统如何后台管理,后台管理... 你有没有发现,手机里的安卓系统就像一个超级管家,默默地在后台为你打理一切?今天,就让我带你一起探索这...
全军出击账号ios系统和安卓系... 你有没有发现,最近全军出击这款游戏可是火得一塌糊涂啊!不管是iOS系统还是安卓系统,都能轻松驾驭,玩...
刘氏神数安卓系统,揭秘安卓系统... 你有没有听说过刘氏神数安卓系统?这可是最近在数码圈里火得一塌糊涂的存在呢!想象你的手机瞬间变成了一个...
vivo新系统怎么退回安卓系统... 亲爱的手机控们,你是否在最新的vivo手机上体验了新系统,却突然觉得有些不适应呢?别担心,今天就来手...
安卓系统微信误删好友,教你轻松... 你有没有遇到过这种情况?手机里微信的好友列表里突然少了几个熟悉的名字,心里顿时慌得一笔,是不是不小心...
如何删除密码设置安卓系统,安卓... 你是不是也遇到了这样的烦恼:手机里的安卓系统密码设置太复杂,有时候自己都忘了密码是什么了?别急,今天...
怎样使安卓系统允许安装,安卓系... 你是不是也和我一样,对安卓系统的限制感到头疼?有时候,我们想要安装一些非官方的应用,却发现系统不让步...
一分钟了解!牛牛房卡游戏代理华... 今 日消息,华山大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
玩家攻略,牛牛房卡哪里有卖的茄... 茄子娱乐房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...