一招教你成为大内密探:诊断优化找出消耗CPU性能的内鬼

linux实用脚本show-busy-java-threads linux实用脚本show-busy-java-threads、show-duplicate-java-classes、find-in-jars 立即下载

每次提起性能测试,都是开始于脚本、压力,然后各种监控,最后的最后就是分析。每次到了最后一个环境,所有大牛都说是一个很复杂的过程一两句话说不清楚。让人陷入了无尽的遐想~~~~~。

今天,测试就告诉你如何找到Java消耗CPU的进程是怎么被找到的。

传统的手段

当遇见CPU性能飙升到接近100的时候,首先需要进入对应的服务器,然后通过如下一连串的动作找到最耗资源的罪魁祸首。

top发现最好是的进程

在shell界面中,输入top,找到最消耗CPU的那个Java进程。记录下PID号码。

然后通过:

top -H -p pid

命令查看对应PID进程下的线程,找到最耗资源的线程的PID。将其通过shell转成十六进制:

printf ”%x\n“ pid
%x,表示十六进制,\n是换行

应用jstack针对上面耗时的线程进行分析

jstack PID(十六进制)1> xxx.tmp

然后打开xxx.tmp文件,搜索PID(十六进制)号码,下面的堆栈就是这个线程打出来的。排查问题就可以从这些堆栈信息开整找到问题。

一个一劳永逸的工具

show-busy-java-threads用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。

GitHub地址:https://github.com/oldratlee/useful-scripts

在服务器端,克隆项目: git clone git://github.com/oldratlee/useful-scripts.git

cd useful-scripts

然后就可以看到了show-busy-jaa-threads工具了。其中,该Github仓库有一个release发布分支,里面包含的都是功能稳定的脚本,建议使用的时候切换到该分支。方法如下:

# 使用Release分支的内容
git checkout release
# 更新脚本
git pull

进入userful-scripts目录后,输入 ./show-busy-java-threads就可以使用这个工具进行上述消耗CPU的优化分析了。其他show-busy-java-threads工具的用法如下:

show-busy-java-threads

# 从所有运行的Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈



# 缺省会自动从所有的Java进程中找出最消耗CPU的线程,这样用更方便

# 当然你可以手动指定要分析的Java进程Id,以保证只会显示出那个你关心的那个Java进程的信息

show-busy-java-threads -p <指定的Java进程Id>



show-busy-java-threads -c <要显示的线程栈数>



show-busy-java-threads <重复执行的间隔秒数> [<重复执行的次数>]

# 多次执行;这2个参数的使用方式类似vmstat命令



show-busy-java-threads -a <运行输出的记录到的文件>

# 记录到文件以方便回溯查看



show-duplicate-java-classes -S <存储jstack输出文件的目录>

# 指定jstack输出文件的存储目录,方便记录以后续分析



##############################

# 注意:

##############################

# 如果Java进程的用户 与 执行脚本的当前用户 不同,则jstack不了这个Java进程

# 为了能切换到Java进程的用户,需要加sudo来执行,即可以解决:

sudo show-busy-java-threads



show-busy-java-threads -s <指定jstack命令的全路径>

# 对于sudo方式的运行,JAVA_HOME环境变量不能传递给root,

# 而root用户往往没有配置JAVA_HOME且不方便配置,

# 显式指定jstack命令的路径就反而显得更方便了



# -m选项:执行jstack命令时加上-m选项,显示上Native的栈帧,一般应用排查不需要使用

show-busy-java-threads -m

# -F选项:执行jstack命令时加上 -F 选项(如果直接jstack无响应时,用于强制jstack),一般情况不需要使用

show-busy-java-threads -F

# -l选项:执行jstack命令时加上 -l 选项,显示上更多相关锁的信息,一般情况不需要使用

# 注意:和 -m -F 选项一起使用时,可能会大大增加jstack操作的耗时

show-busy-java-threads -l



# 帮助信息

$ show-busy-java-threads -h

Usage: show-busy-java-threads [OPTION]... [delay [count]]

Find out the highest cpu consumed threads of java, and print the stack of these threads.



Example:

 show-busy-java-threads       # show busy java threads info

 show-busy-java-threads 1     # update every 1 second, (stop by eg: CTRL+C)

 show-busy-java-threads 3 10  # update every 3 seconds, update 10 times



Output control:

 -p, --pid <java pid>      find out the highest cpu consumed threads from the specified java process,

                           default from all java process.

 -c, --count <num>         set the thread count to show, default is 5.

 -a, --append-file <file>  specifies the file to append output as log.

 -S, --store-dir <dir>     specifies the directory for storing intermediate files, and keep files.

                           default store intermediate files at tmp dir, and auto remove after run.

                           use this option to keep files so as to review jstack/top/ps output later.

 delay                     the delay between updates in seconds.

 count                     the number of updates.

                           delay/count arguments imitates the style of vmstat command.



jstack control:

 -s, --jstack-path <path>  specifies the path of jstack command.

 -F, --force               set jstack to force a thread dump.

                           use when jstack <pid> does not respond (process is hung).

 -m, --mix-native-frames   set jstack to print both java and native frames (mixed mode).

 -l, --lock-info           set jstack with long listing. Prints additional information about locks.



cpu usage calculation control:

 -d, --top-delay           specifies the delay between top samples, default is 0.5 (second).

                           get thread cpu percentage during this delay interval.

                           more info see top -d option. eg: -d 1 (1 second).

 -P, --use-ps              use ps command to find busy thread(cpu usage) instead of top command,

                           default use top command, because cpu usage of ps command is expressed as

                           the percentage of time spent running during the entire lifetime of a process,

                           this is not ideal.



Miscellaneous:

 -h, --help                display this help and exit.

其实优化是性能测试的根本目标,找到问题后分析问题才是关键,通过各种手段找到更详细的问题,找到更多的数据和RD一起分析。

结语:

最后跟大家推荐一个学习资料分享群:175317069,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!

人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!

show-busy-java-threads.sh文件 show-busy-java-threads脚本初体验,快速排查Java的CPU性能问题 立即下载

相关推荐

show-busy-java-threads.sh

用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。

show-busy-java-threads

背景 经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一通手忙脚乱,定位过程百转千回。 对此,也有不少同学曾经整理过相关流程或方法论,类似把大象放进冰箱要几步 传统的方案一般是4步: 1.topoderbywithP:1040//首先按进程负载排序找到axLoad(pid) 2.top -Hp 进程PID:1073//找到相关负载线程...

很多时候犯错都是在不知情的情况下发生的 2948

Claude skill-creator插件深度解析:从创建到优化的完整技能工程化体系

摘要:skill-creator是Anthropic推出的Claude技能开发插件,提供从创建到优化的全流程工程化支持。其核心架构采用渐进式披露机制和多Agent协作模式,包含Grader、Analyzer等专业评估组件。该插件支持自动化评测系统,通过测试用例管理、并行执行和结果聚合实现技能验证;提供迭代优化算法,基于数据驱动改进技能性能。典型应用场景包括标准化技能开发、自动化测试验证和触发优化,显著降低开发门槛并提升技能质量。

虚心若愚 989

show-busy-java-threads脚本内容及使用过程

先附上git链接:脚本git传送门 #!/bin/bash # @Function # Find out the highest cpu consumed threads of java processes, and print the stack of these threads. # # @Usage # $ ./show-busy-java-threads # # @online-doc https://github.com/oldratlee/useful-scripts/blob/master

daiming573的专栏 2770

银河麒麟V10SP1实战:5步搞定AD域登录(附Samba+Winbind配置详解)

本文提供银河麒麟V10 SP1操作系统无缝集成Windows AD域的实战指南。文章深入解析了Samba、Winbind与Kerberos三大核心组件的协作原理,并详细阐述了从环境准备、软件包安装、配置文件定制到执行加域及排错的全流程。特别针对2403等新版本提供了关键配置差异与避坑要点,旨在帮助企业运维人员实现高效、稳定的域环境登录与管理。

weixin_29269441的博客 297

YOLO11,ultralytics-main源代码目录结构详解

本文详细介绍了YOLO11框架的ultralytics-main源代码目录结构,帮助用户更好地理解和使用YOLO模型。主要目录包括:docker文件夹,包含多种Docker镜像文件,适用于不同硬件环境;docs文件夹,存放YOLO的说明文档;examples文件夹,提供YOLO使用的示例代码;tests文件夹,包含单元测试模块;ultralytics文件夹,为核心代码所在,包含推理逻辑、配置、数据处理等模块。其中,engine文件夹负责训练和推理引擎,models文件夹存放模型架构,nn定义神经网络结构

qq_30279827的博客 1285

【script】Github上的工具脚本useful-scripts

https://github.com/oldratlee/useful-scripts 转载于:https://www.cnblogs.com/tigerhsu/p/10955657.html

weixin_30432007的博客 384

华为OD机试 - 报文响应时间 - 贪心算法、位运算(Python/JS/C/C++ 2024 E卷 200分)

贪心算法是在每一步选择中都做出当前最优的选择,期望通过局部最优解推导出全局最优解的算法。

学Java,找哪吒 1758

java 排查性能问题,JVM那点事—show-busy-java-threads排查CPU性能问题

show-busy-java-thread用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的JAVA进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。1. 以往方法top命令找出消耗CPU高的Java进程及其线程id:i. 开启线程的显示模式(top -H,或者打开top后按H)。ii. 按cpu使用率排序(top缺省就是按CPU的使用率降序)。i...

weixin_28895433的博客 863

ZYNQ Petalinux编译系统启动文件实战指南

本文提出的混合编译加速方案实测可将编译时间从45分钟缩短至18分钟,QSPI双启动方案已在工业控制领域成功应用。Xilinx官方UG1144文档(最新v2023.1版)正点原子《ZYNQ嵌入式开发实战》开源项目Meta-Petalinux(GitHub趋势项目)未来展望:随着Versal平台的普及,Petalinux将支持更多AI加速器原生驱动,值得持续关注。

QQ_778132974的博客 813

YOLOv11改进 - 卷积Conv | PATConv(Partial Attention Convolution)部分注意力卷积,在减少计算量的同时融合卷积与注意力的优势 | AAAI 2026

本文提出部分注意力卷积(PATConv)机制,并将其集成到YOLOv11中。传统神经网络中,卷积计算密集,注意力机制全局计算冗余,此前的“部分卷积”会丢失未计算通道的特征价值。PATConv通过“通道拆分 - 并行处理 - 结果拼接”的逻辑,给不同通道分配“擅长的任务”,兼顾局部与全局特征。基于此,它还衍生出PAT_ch、PAT_sp和PAT_sf三种细分模块。此外,还提出了动态部分卷积(DPConv),并构建了新的混合网络家族PartialNet。我们将PATConv代码集成到YOLOv11中,实验表明,

魔改工程师的博客 1085

排查占用资源java代码脚本

show-busy-java-threads.sh(摘自:https://github.com/oldratlee/useful-scripts/blob/master/show-busy-java-threads.sh)     #!/bin/bash   # @Function   # Find out the highest cpu consumed thread...

vay156630557的博客 375

让 SAP HANA 查询飞起来:彻底避开隐式类型转换的性能暗礁

SAP HANA性能优化:警惕隐式类型转换陷阱 隐式类型转换是SAP HANA项目中常见的性能隐患。当SQL表达式两侧数据类型不匹配时,系统会自动进行类型转换,这种看似便利的操作可能导致: 过滤条件无法下推,扫描范围扩大 列存引擎优势丧失,触发中间结果物化 执行计划走向低效路径 治理方案包括: 从源头统一数据类型,确保常用比较字段类型一致 将显式转换应用于常量而非整列 使用生成列预先转换存储,避免运行时计算 排查方法: 通过SQL Plan Cache定位高频查询 分析执行计划中的转换迹象 重点关注VARC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 11万+

show-busy-java-threads脚本初体验,快速排查Java的CPU性能问题

前言 之前写过一篇文章,通过top和jstack命令来排查CPU使用率高的问题,详见:https://blog.youkuaiyun.com/yougou_sully/article/details/84262453;后面在github上看到一位工程师对top,jstack命令进行了整合,一行命令就可以找到CPU使用率高的java线程。使用起来非常方便。脚本介绍为:https://github.com/ol...

sully2008的专栏 1万+

Python + OpenCV 计算视频中运动最慢小球的坐标验证码

本文提出一种基于Python和OpenCV的视频分析方法,用于检测多个运动小球中最慢运动目标的坐标。方法主要包括:1) 通过背景差分和形态学处理提取运动前景;2) 基于轮廓面积和圆形度筛选候选小球;3) 利用图像矩计算小球质心坐标;4) 通过近邻关联构建运动轨迹;5) 根据轨迹平均速度确定最慢目标。该方法能有效处理包含线条干扰和静态大圆干扰的背景,稳定输出最慢小球的中心坐标。实验结果表明,该方法能准确识别运动最慢的小球并定位其位置。

码王吴彦祖的博客 116

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

useful-scripts

最近在github看到关于一些比较好的java相关脚本、vcs脚本、shell脚本。怕以后忘记了,在此做个备注。 原链接为:https://github.com/oldratlee/useful-scripts   链接中的脚本列表:  Java相关脚本 show-busy-java-threads.sh打印出在运行的Java进程中,消耗CPU最多的线程栈。用于快速排查Java的性能...

weixin_34110749的博客 444

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

副本 利用阿里开源工具进行排查线上CPU居高问题

在此为大家准备了四节优质的Android高级进阶视频:架构师项目实战——全球首批Android开发者对Android架构的见解。

2401_84121499的博客 950

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java知识点随记

它实际上是由一个很长的二进制数组+一系列hash算法映射函数,用于判断一个元素是否存在于集合中。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。

qq_16570607的博客 476

排查Java的CPU性能问题

最近在github上看到了一个很实用一些脚本,github地址: https://github.com/oldratlee/useful-scripts 其中有一个(show-busy-java-threads)用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。 于是尝试了一把,具体案...

勿忘初心 2078

干货第一弹-教你如何利用阿里开源工具进行排查线上CPU居高问题

包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

2401_84046912的博客 962

原始命令排查java虚拟机问题与阿里工具show-busy-java-threads

CPU飙升 1,查找飙升进程:28207 top image.png 2,查找飙升线程: ps -mp 28207 -o THREAD,tid,time | sort -rn > mp.txt image.png 3,线程号转16进制 printf "%x\n" 28210 6e32 printf "%x\n" 28211 6e33 ...

sqlora的专栏 675

show-busy-java-threads.sh的解析和使用实例

摘要:该脚本用于检测Java进程中CPU占用最高的线程,并打印其堆栈信息。支持通过-p指定进程ID,-c设置显示线程数(默认5)。首先检查jstack工具可用性,然后通过ps命令获取线程CPU使用率,排序后提取前N个线程,转换为十六进制ID,最后通过jstack输出对应线程堆栈。包含错误处理和临时文件清理机制,适合诊断Java性能问题。

xu990128638的专栏 144

原始命令排查虚拟机问题与阿里工具show-busy-java-threads

CPU飙升 1,查找飙升进程:28207 top image.png 2,查找飙升线程: ps -mp 28207 -o THREAD,tid,time | sort -rn > mp.txt image.png 3,线程号转16进制 printf "%x\n" 28210 6e32 printf "%x\n" 28211 6e33 4,打印异常堆栈信息 #jstack pid |grep tid -A 30 jstack 282...

sqlora的专栏 1362

cpu使用过高 show-busy-java-threads脚本查看

这里写自定义目录标题1、top 查看cpu使用过高的PID2、脚本 + Pid 查看该进程的堆栈信息3、编写脚本附加x权限 1、top 查看cpu使用过高的PID 2、脚本 + Pid 查看该进程的堆栈信息 show-busy-java-threads 523938 查看到信息就可以发送给开发们看了 3、编写脚本附加x权限 vim /usr/local/bin/show-busy-java-threads #!/bin/bash # @Function # Find out the highest c

qq_2331233079的博客 634
上一篇: 集成测试——Spring TestContext框架支持详细解说
下一篇: 你不知道的软件测试那些事?
TestingGDR
博客等级 码龄8年 496粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值