如何分析java进程中哪个线程最耗资源

查找java最耗费CPU线程的命令 查找java应用耗费CPU进程、线程的命令 阅读详情

我们知道,java程序一般都很耗资源,动辄都是好几G的内存,甚至几十G。对外,java进程是一个整体,而且java是共享内存模型,所以很难分析单个线程,但是我们还是可以分析java线程消耗cpu的情况。

1 首先得到要分析的java程序进程id,可以通过jps命令:

[make@master ~]$ jps -l
10242 com.intellij.idea.Main
10597 org.jetbrains.idea.maven.server.RemoteMavenServer
15127 sun.tools.jps.Jps
11613 org.jetbrains.jps.cmdline.Launcher

因为intellij不仅耗内存也耗cpu,不如就来分析它吧。

2  用top命令分析进程号为10242内的线程:

top - 21:14:03 up  3:26,  2 users,  load average: 0.02, 0.17, 0.26
Threads:  50 total,   0 running,  50 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.1 us,  0.5 sy,  0.0 ni, 97.9 id,  0.5 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3792584 total,   226952 free,  2734716 used,   830916 buff/cache
KiB Swap:  4063228 total,  3474208 free,   589020 used.   308556 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                 
10599 make      20   0 4981576 977.4m  12568 S  0.7 26.4   0:42.29 java                                                                    
10600 make      20   0 4981576 977.4m  12568 S  0.7 26.4   0:42.24 java                                                                    
10258 make      20   0 4981576 977.4m  12568 S  0.3 26.4   0:03.62 java                                                                    
10242 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10243 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:01.33 java                                                                    
10244 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:01.47 java                                                                    
10245 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:01.48 java                                                                    
10246 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:01.51 java                                                                    
10247 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:01.46 java                                                                    
10248 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:04.06 java                                                                    
10249 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:02.62 java                                                                    
10250 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.05 java                                                                    
10251 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.04 java                                                                    
10252 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10253 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10254 make      20   0 4981576 977.4m  12568 S  0.0 26.4   1:00.67 java                                                                    
10255 make      20   0 4981576 977.4m  12568 S  0.0 26.4   1:06.17 java                                                                    
10256 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:33.85 java                                                                    
10257 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10259 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.01 java                                                                    
10260 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:02.39 java                                                                    
10262 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 gdbus                                                                   
10263 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 gmain                                                                   
10269 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10270 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.31 java                                                                    
10272 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.06 java                                                                    
10273 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:04.32 java                                                                    
10274 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10277 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:56.89 java                                                                    
10281 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10282 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.04 java                                                                    
10283 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10288 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10290 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.29 java                                                                    
10582 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:01.15 java                                                                    
10598 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10620 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.03 java                                                                    
10621 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10622 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10624 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.00 java                                                                    
10625 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.03 java                                                                    
10629 make      20   0 4981576 977.4m  12568 S  0.0 26.4   0:00.23 java                                                                    

3 下面来分析进程号为10599 的线程情况(java 线程对外映射称操作系统的进程)

首先得到该java进程的线程堆栈信息:

   jstack -l 10242 > stack.log

然后得到线程10599对应的16进制:

[make@master ~]$ python -c "print hex(10599)"
0x2967

然后在stack.log 文件里找到对应线程:

"BaseDataReader: output stream of java" #57 prio=4 os_prio=0 tid=0x00007f88f0914000 nid=0x2967 in Object.wait() [0x00007f88d8df4000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at com.intellij.util.io.BaseDataReader.doRun(BaseDataReader.java:173)
        - locked <0x00000000e5227758> (a java.lang.Object)
        at com.intellij.util.io.BaseDataReader$1.run(BaseDataReader.java:61)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
        - <0x00000000e20ee510> (a java.util.concurrent.ThreadPoolExecutor$Worker)

下面就可以针对该线程做进一步分析,为啥这么耗cpu


进程与线程 当 Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java 中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的。操作系统中有一个组件叫做任务调度器,将 CPU 的时间片(windows 下时间片最小约为 15ms)分给不同的程序使用,只是由于 CPU 在线程间(时间片很短)的切换非常快。多核 CPU 下,每个核(core)都可以调度运行线程,这时候线程是可以并行的。 阅读详情

相关推荐

linux下查看java进程下线程占用cpu情况

linux下查看java进程下线程占用cpu情况

【JVM性能调优】使用jstack找出最耗CPU的java线程

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体的代码,所以它在JVM性能调优中很常见。下面我们在找出某个java进程中最耗CPU的线程,并定位堆栈信息,使用到的命令有:ps、top、printf、jstack、grep。 1、使用top -c命令查看占用CPU最高的java进程 #top -c 2、查看CPU占用最高的线程 (1)#top -Hp 9179 -d...

lmb55的专栏 4998

Python自动化车载测试:5分钟搞定CANoe COM接口调用(附完整代码)

本文详细介绍了如何使用Python快速实现CANoe COM接口调用,完成车载测试自动化。通过实战案例展示ECU信号测试框架搭建,包括环境配置、核心架构解析、信号读写封装及多线程安全方案,帮助开发者5分钟内掌握高效测试技巧。

vv45678的博客 1131

查找Java哪个线程占用CPU 最多

查找Java哪个线程占用CPU 最多

奔跑的蜗牛AZ的博客 2319

68页|大型车企集团数字化转型汽车数字化信息系统平台规划方案

这份PPT文档提供了一个全面的汽车集团数字化转型规划方案,涵盖了项目目标、规划思路、实施关注点、解决方案建议以及合作优势等多个方面。

baidu_25525561的博客 1327

紫光同创PGL50H开发板实战:盘古50KN网口板的高速通信与数据处理

本文详细介绍了紫光同创PGL50H开发板(盘古50KN网口板)在高速通信与数据处理领域的实战应用。文章从开箱、核心芯片解析、开发环境搭建入手,重点讲解了如何配置与测试其8路千兆以太网接口和SFP光纤接口,并深入探讨了FPGA与DDR3协同进行多路数据汇聚处理的系统架构与调试方法,为网络通信与高速数据处理系统开发提供了宝贵的实践经验。

weixin_28256233的博客 452

java中jvm使用jststak定位线程cpu占用内存高的线程

java中jvm使用jststak定位线程cpu占用内存高的线程

风水道人 447

基于AR和SLAM技术的商场智能导视系统技术原理详解

本文针对智慧商场室内导航需求,提出基于AR和SLAM技术的商场智能导视系统技术方案,实现了沉浸式导览体验并促进消费转化,助力商场运营升级。

维小帮定位导航的博客 1242

java查看占用资源最多的代码,java应用占用内存过高排查的解决方案

故障:收到服务器报警,内存使用率超过80%1.查看使用dstat和top查看内存使用最高的应用使用dstat查到内存占用最高的是java应用,使用2253M内存,但是这台服务器跑了好几个java,具体哪个进程使用top看下资源情况使用top可以看到java应用整体内存使用率超过了70%,其中pid为16494的进程 一个应用占了28.7的内存2.定位线程问题使用ps查看16494的线程情况命令:p...

weixin_42656416的博客 2327

循环神经网络(RNN)原理及BPTT算法

因循环神经网络基于ANN之上,理解ANN有助于理解RNN,所以阅读此文,建议先阅读。

L 1768

【产品经理修炼之道】- 基金产品-“TA系统 ”

TA:Transfer Agent 缩写,通常称成“登记过户”。开放式基金登记过户(TA)系统是基金的登记过户系统。其功能涵盖了基金交易业务的各个环节,包括账户业务处理,如投资者开户、修改账户资料、挂失/解挂等;日常交易业务处理,如认购、申购(一般申购和定期定额)、赎回(一般赎回、指定赎回、预约赎回等)、转托管、基金转换等;特殊业务处理,如非交易过户、账户冻结/解冻等;分红业务处理,如现金分红和红利再投资。

xiaoli8748的专栏 1675

如何确定Java程序中哪个线程最耗CPU资源

文章目录一、Windows操作系统二、Linux操作系统: 一、Windows操作系统 执行Java程序,如下代码:public class Test { public static void main(String[] args) { new Thread(new Task()).start(); } static class Task implements Runnable ...

qq_41135704的博客 594

[QMT量化交易小白入门]-五十、十年基本保证每年盈利,全天ETF候稳稳的幸福

全局参数raise_rate = -1 # 触发rebalance的上涨比例period: 设定为22,表示每22个交易日执行一次调仓(即大约每月一次)。这是策略的时间框架基础。raise_rate: 初始值设为-1,意味着默认情况下不会因为资产的涨幅而触发调仓。这一参数用于控制是否基于资产表现动态调整仓位。run_count: 用于记录策略运行的次数,帮助判断何时执行定期调仓。1、为了简便计算,回撤时将调仓再平衡是先卖出再买入,没有比较持仓,实盘时是需要计算的,减少交易费用。

木头大左的博客 806

确定Java程序中哪个线程最耗CPU资源的方法

Window操作系统 执行如下程序 public class Test { public static void main(String[] args) { new Thread(new Task()).start(); } static class Task implements Runnable { @Override public void run() { ...

wang_da_bing的博客 837

【RK3399 Ubuntu】基于rk3399的lxde的lubuntu桌面移植适配记录之第二步:最基本Ubuntu根文件系统的相关常用工具完善

文章目录1.使能系统网络管理服务1.1 安装驱动modules管理工具1.2 使能网络服务2.终端自动补全命令功能3.安装ssh服务4.安装系统信息查看工具5.安装resize工具6.安装lrzsz工具7.使能rc.local服务7.1 修改服务Install块7.2 使能rc.local.service服务7.3 添加执行脚本且赋予执行权限 续接上文,本文主要完善前面已经制作好的rootfs 1.使能系统网络管理服务 1.1 安装驱动modules管理工具 apt-get install kmod 1.

wang 恒 的博客 1385

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java中的进程与线程(如果想知道Java中有关进程与线程的知识点,那么只看这一篇就足够了!)

Java中的进程与线程(如果想知道Java中有关进程与线程的知识点,那么只看这一篇就足够了!)

秋刀鱼不做梦的编程日常 8205

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

进程和线程的区别

转自文章进程和线程的区别 1、根本区别 进程和线程的根本区别是进程是操作系统资源(OS)分配的基本单位,而线程是处理器(CPU)任务调度和执行的基本单位。 2、资源开销: 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。 3、包含关系: 如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线 同完成的;线程是进程的一部分,所行过程不愿一条绿的,而

qq_40855100的博客 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Windows下分析Java进程中最消耗资源的线程

Java排查最消耗资源线程 工具下载: Process Explorer下载 运行工具 找到对应java进程 双击该进程打开线程界面: 执行jstack 18464 &gt; thread_dump.txt,将java进程线程信息保存 由于该文本中的保存的线程ID是16进制存储的,所以将最大消耗cpu资源线程20960转成16进制进行查找。如图 最后在文本中找到对应的Java线程,以及详细...

qq_21060861的博客 1036

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

参考:https://zhuanlan.zhihu.com/p/80850972 java程序CPU消耗过高一般有两种情况: 1、us过高,应用占用CPU资源过高,需找出具体占用CPU的线程所执行的代码,分析定位问题原因。 分析步骤如下: (1) 使用top命令找出占用cpu最高的JAVA进程 (2) 找出占用cpu最高的线程 top -Hp 1781 ...

robinson_911的专栏 650

Java获取Linux的fullgc,linux里查看最耗CPU的线程(full gc)

1、top后按c查看最耗cpu的进程,得到pid2、top -Hp pid 查看该进程里的线程资源使用情况,找到最耗资源的线程的pid3、jstack pid来查看进程的各个线程栈,注意这里的pid是第一步中进程的pid,不是第二步得到的线程id4、将第二步得到的pid转成16进制之后在线程栈信息里查找nid等于pid16进制的,就找到最耗资源的线程的栈信息话不多说了,先来看代码吧public c...

weixin_42144554的博客 654

如何查看Java进程和线程

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

Y1567409的博客 2893

【JVM问题排查】之找出最耗cpu的线程

找出最耗cpu的线程java线程

volming36337的博客 889

获取java最耗cpu资源线程信息

n=$1 if [ -z $n ]; then n=1 fi pid=`jps -lv|grep Server|awk '{print $1}'` ps H -eo pid,ppid,tid,time,%cpu --sort=%cpu|grep $pid>Thread.txt jstack $pid >/wls/wls81/jstack.txt tid=`...

dcq36283的博客 179

进程和线程的区别,及线程间的公共资源和私有资源

进程拥有两个基本的属性:资源的拥有者和独立调度单位。进程是资源分配和独立运行的基本单位,每一个进程都完成一个特定的任务。线程的引入进一步提高了程序并发执行的程度,从而进一步提高了资源的利用率和系统的吞吐量。引入线程目的是减少并发执行时的时空开销。因为进程的创建、撤销、切换较费时空,它既是调度单位,又是资源拥有者。线程是系统独立调度和分派的基本单位,基本上不拥有系统资源,只需要少量的资源(指令指针I...

qq_37523868的博客 6818

Java:线程与进程入门

这一节我们讲什么是线程、什么是进程、线程与进程的关系、以及并发与并行的概念。

pillow_mycode的博客 1244
上一篇: linux shell 中数组的定义和for循环遍历
下一篇: mysql lower_case_table_names 参数引起的一起事故
touch_future
博客等级 码龄10年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值