首页 > 编程语言 >Java应用导致CPU使用率过高的排查方法

Java应用导致CPU使用率过高的排查方法

时间:2023-12-03 18:32:26浏览次数:36  
标签:Java grep jstack 线程 Test java 使用率 CPU

1、搭建CentOS 7.9,部署JDK 8:

Java应用导致CPU使用率过高的排查方法_ps

2、编写测试代码Test.java:

public class Test {
    public static void main(String[] args) {
        System.out.println("测试死循环对CPU的影响");
        while (true){
        }
    }
}

Java应用导致CPU使用率过高的排查方法_CPU使用率高_02

3、编译Test.java:

# javac Test.java

Java应用导致CPU使用率过高的排查方法_CPU使用率高_03

4、运行Test程序:

# java Test

Java应用导致CPU使用率过高的排查方法_java应用_04

5、新开一个Shell窗口,使用top命令,按c键,降序查看CPU使用率:

Java应用导致CPU使用率过高的排查方法_top_05

6、查看进程PID下的线程详情:ps H -eo pid,tid,%cpu | grep 进程PID

# ps H -eo pid,tid,%cpu | grep 3698

Java应用导致CPU使用率过高的排查方法_CPU使用率高_06

7、将线程的TID值转化为16进制格式:printf '0x%x\n' 线程TID

# printf '0x%x\n' 3699

Java应用导致CPU使用率过高的排查方法_CPU使用率高_07

8、使用jstack命令查看指定进程的当前时刻的线程快照:jstack 进程PID | grep -A 20 16进制线程TID

# jstack 3698 | grep -A 20 0xe73

Java应用导致CPU使用率过高的排查方法_CPU使用率高_08

说明:直接定位到了Test.java第四行代码的位置,即while死循环位置,修改代码并重新编译运行,就可解决此死循环导致的CPU占用率高的问题。

标签:Java,grep,jstack,线程,Test,java,使用率,CPU
From: https://blog.51cto.com/qiuyue/8668769

相关文章

  • Linux配置Java环境变量(详细步骤总结
    (目录)前言Java的环境变量的配置应该是每个java开发者使用Linux必备的一个配置,鉴于之前笔者在配置虚拟机或者云服务器的时候,都需要额外从网页上寻找资料,略显得有点麻烦,故在此总结一篇Java环境变量的详细配置步骤总结,希望可以帮助广大开发者们提高自己的效率下载JDK官网下载j......
  • java.net.ConnectException: Connection timed out: connectjava.net.连接异常:连接超
    因为我有steam++加速器,但这个加速器会清空你的hosts文件,往常出现java.net.ConnectException:Connectiontimedout:connectjava.net.连接异常:连接超时:连接这个问题的时候一般都是hosts文件被清空了。但昨天写作业的时候发现在hosts文件写上ip以后还会报错。这个问题我解决了......
  • Java学习之路(十一)
    Java学习之路(十一)1、常用API1.1、Math(应用)1、Math类概述Math包含执行基本数字运算的方法2、Math中方法的调用方式Math类中无构造方法,但内部的方法都是静态的,则可以通过类名.进行调用3、Math类的常用方法方法名方法名说明publicstaticinta......
  • Java智慧工地一体化解决方案(里程碑管理)源码
    智慧工地为管理人员提供及时、高效、优质的远程管理服务,提升安全管理水平,确保施工安全提高施工质量。实现对人、机、料、法、环的全方位实时监控,变被动“监督”为主动“监控”。一、建设背景施工现场有数量多、分布广,总部统一管理难度大;工地作业流程节点多,缺少过程可视化管理,成本......
  • Java中的死锁问题及其解决方案
    第1章:引言大家好,我是小黑。今天咱们来聊聊Java编程中一个让人头疼的问题——死锁。你可能听说过死锁,或者在编码时不小心遇到过。死锁就像是交通堵塞,在程序的世界里,它会让线程陷入无尽的等待,导致程序无法正常运行。在Java并发编程中,理解死锁并学会如何处理它是非常关键的。接下来,我......
  • JavaScript的设计模式—构造器模式
    设计模式介绍设计模式是我们在解决问题的时候针对特定问题给出的简洁而优化的处理方案在JS设计模式,最核心的思想:封装变化将变与不变分离,确保变化的部分灵活,不变的部分稳定构造器模式varemployee1={name:'Kerwin',age:100}varemployee2={name:'xiaoming',......
  • Day18 JavaDoc生成文档
    参数信息(加在类上就是类的注释,加在方法上就是方法的注释)/**@author作者名@version版本号@since指明需要最早使用的jdk版本@param参数名@return返回值情况@throws异常抛出情况*/packagecom.baixiaofan.base;/***@authorBaixiaofan*@version1.0*@si......
  • Java Learning Day4 面向对象基础
    初始化顺序:默认初始化显示初始化构造器初始化(单参先执行)有内部类加载的话,在显式赋值之后,就进行新的加载 Static静态变量:静态成员变量属于类的,完全不需要创建对象使用。 private:同类中缺省:同一包中protected:不同包子类public:不同包 只有成员变量可以用权限修饰符......
  • 学习笔记4:JavaSE & API(集合)
    1、集合综述(1)定义:集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便。(2)java集合框架中相关接口java.util.Collection接口:所有集合的顶级接口。Collection下面有多种实现类,因此我们有更多的数据结构可供选择。java.util.List:线性表。是可重复集合,并且有......
  • Java开发者的Python快速进修指南:自定义模块及常用模块
    好的,按照我们平常的惯例,我先来讲一下今天这节课的内容,以及Java和Python在某些方面的相似之处。Python使用import语句来导入包,而Java也是如此。然而,两者之间的区别在于Python没有类路径的概念,它直接使用.py文件的文件名作为导入路径,并将其余的工作交给Python解释器来扫描和处理。另......