首页 > 编程语言 >Java程序CPU消耗分析之找出最耗CPU线程

Java程序CPU消耗分析之找出最耗CPU线程

时间:2023-06-27 11:02:06浏览次数:37  
标签:找出 Java int 1781 占用 线程 CPU

java程序CPU消耗过高一般有两种情况:
1、 us过高,应用占用CPU资源过高,需找出具体占用CPU的线程所执行的代码,分析定位问题原因。
分析步骤如下:
 
(1) 使用top命令找出占用cpu最高的JAVA进程
    
 
 
(2) 找出占用cpu最高的线程 
top -Hp 1781
    
 
(3) 占CPU最高线程17596换算成16进制对应线程44bc
用命令
printf "%x\n" 17596
    
 
(4) 打印占CPU最高JAVA进程1781的堆栈信息 
jstack 1781> stackdump.txt
    
 
代码如下:
public class CPUConsumeTest {
    public static void main(String[] args) {
        int count = Runtime.getRuntime().availableProcessors();
        System.out.println("processors " + count);
            new Thread(new ConsumeCPUTest()).start();
        }
       
        for(int i=0; i<100; i++) {
            new Thread(new NotConsumeCPUTest()).start();
        }
    }
   
}
class ConsumeCPUTest implements Runnable {
    public void run() {
        while(true) {
            for(int i=0; i<10000000; i++) {
                long l = 1000000;
                Math.acos(l);
            }
            try {
                Thread.currentThread().sleep(20);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}
class NotConsumeCPUTest implements Runnable {
    public void run() {
        while(true) {
            try {
                Thread.currentThread().sleep(50);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}
 
 
 
2、sy过高,上下文切换过频繁,将线程栈打印出来,看是否有哪个锁竞争过于激烈


标签:找出,Java,int,1781,占用,线程,CPU
From: https://blog.51cto.com/u_16111396/6561438

相关文章

  • jmeter中跨线程调用变量
    Jmeter中跨线程调用变量一.Jmeter中线程运行规则1.各个线程组是完全独立的,每个线程组是不同的业务,互不影响2.线程组中的每个线程也是完全独立3.线程组中的每个线程,都是从上往下执行,完成一轮循环后,继续下一轮循环4.存在业务流或者接口之前存在依赖关系的放同一个线程组5.setup......
  • Java跟数据库连接有问题怎么办?
    Java与数据库连接出现问题时,可以尝试以下几个步骤来解决问题:1、检查数据库驱动程序:确保使用的数据库驱动程序与数据库版本兼容。检查并确保已正确导入所需的数据库驱动程序的jar文件。2、验证数据库连接参数:确保提供了正确的数据库连接参数,包括数据库URL、用户名和密码等。验证......
  • javascript连接MySQL
    varmysql =require('mysql');varconnection=mysql.createConnection({  host  :'localhost',  user  :'root',  password:'password',  port:'3306',  database:'nufix'});connecti......
  • 多进程和多线程以及协程的创建模板
    【一】开启多进程的创建模板(基于Process模块)【1】方式一:创建多进程importmultiprocessingdefworker(n):"""子进程要执行的任务"""print(f'子进程{n}正在执行')defmain():task_lists=[]foriinrange(100)#创建一个进程对象......
  • JavaScript Framework Unpoly 框架介绍
    作为一种创建Web应用程序的更直接的方式,无需使用太多JavaScript,HTML在线技术一直在蓬勃发展。它的工作原理是通过网络发送HTML,而不是JSON。现在,一种名为Unpoly的新JavaScript框架已经成为Basecamp的HTML在线框架Hotwire的竞争者。Unpoly承诺“为服务器渲染的H......
  • spring中的bean是否是线程安全的
    Spring中的bean是否线程安全,与Spring本身是无关的。Spring中会提供很多线程安全方面的策略,因此Spring中的bean也不具备线程安全的特性在Spring的作用域中,有以下几种;prototype(多例)每次getBean得到时候都会创建一个新的对象singleton(单例)在Spring容器中只存在一个全局共......
  • JavaScript 一些简写代码的例子
    在使用UglifyJS对javascript进行压缩和美化时,我在其中发现了一些关于ifelse的语法简写,顺便说说平时有哪些JavaScript代码可以进行简写,同时不会影响可读性和性能。javascript简写(JavaScriptshorthand)是每一个javascript开发者必须掌握的技术,最少的代码获得最大的性能! 1.判断......
  • 线程上运行 task
    我没能实现始终在一个线程上运行task 前文我们总结了在使用常驻任务实现常驻线程时,应该注意的事项。但是我们最终没有提到如何在处理对于带有异步代码的办法。本篇将接受笔者对于该内容的总结。如何识别当前代码跑在什么线程上一切开始之前,我们先来使用一种简单的方式来识......
  • 基于JAVA的springboot班级综合测评管理系统,附源码+数据库+论文+PPT,适合课程设计、毕业
    1、项目介绍随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要互联网技术来方便人们的日常工作生活,实现工作办公的自动化处......
  • javascript:return confirm('您确定要删除吗?')
    javascript:returnconfirm('您确定要删除吗?')οnclick="javascript:returnconfirm('您确定要删除吗?')" 用在<a>和<input>标签里都可以 例如:<ahref="?id=XXX"οnclick="javascript:returnconfirm('您确定要删除该条数据吗?')"......