软件测试之诊断优化找出消耗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号码。

然后通过:


 
  1. top -H -p pid

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


 
  1. printf ”%x\n“ pid

  2.  

  3. %x,表示 十六进制,\n是换行

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


 
  1. 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


 
  1. cd useful-scripts

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


 
  1. # 使用Release分支的内容

  2. git checkout release

  3.  

  4. # 更新脚本

  5. git pull

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


 
  1. show-busy-java-threads

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

  3.  

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

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

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

  7.  

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

  9.  

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

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

  12.  

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

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

  15.  

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

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

  18.  

  19. ##############################

  20. # 注意:

  21. ##############################

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

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

  24. sudo show-busy-java-threads

  25.  

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

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

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

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

  30.  

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

  32. show-busy-java-threads -m

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

  34. show-busy-java-threads -F

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

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

  37. show-busy-java-threads -l

  38.  

  39. # 帮助信息

  40. $ show-busy-java-threads -h

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

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

  43.  

  44. Example:

  45.  show-busy-java-threads       # show busy java threads info

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

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

  48.  

  49. Output control:

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

  51.                            default from all java process.

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

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

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

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

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

  57.  delay                     the delay between updates in seconds.

  58.  count                     the number of updates.

  59.                            delay/count arguments imitates the style of vmstat command.

  60.  

  61. jstack control:

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

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

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

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

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

  67.  

  68. cpu usage calculation control:

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

  70.                            get thread cpu percentage during this delay interval.

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

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

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

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

  75.                            this is not ideal.

  76.  

  77. Miscellaneous:

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

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

——————————————————————————————————————————————————

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

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

倾向得分匹配的stata命令_政策评估方法引荐|广义倾向得分匹配(GPSM)

和大家分享一下最近学习的进展,在痛苦读完stata journal和练习OA程序,已经可以基本完成广义倾向得分的估计了,在国内这一方法还没有形成广泛运用,因此学习资源也是有点稀缺的,在文章最后给各位提供数据和代码以供练习。有问题可以随时文末留言或者联系我哦。人文社会科学中一般无法在实验室中控制样本个体的特征,我们一般采用“准自然实验”的研究路径,也就是不随机安排样本接受处理与否。但放弃随机分组假定...

weixin_39550258的博客 1万+

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

1、STVD和STVP的使用及串口烧写程序教程

文章目录一、前述二、STVD的使用三、STVP的使用1、STVP的作用:2、STVP的使用四、串口烧录程序 一、前述 STVD是意法半导体推出的,可以支持STM8和STM32 而IAR不尽如此,还支持51,MSP430等芯片 软件开发环境:编写程序,调试软件功能,下载固件到单片机中 硬件开发环境:连接外围电路,驱动功能外设,实现电气功能 最终构成一个以STM8系列单片机作为控制核心的应用系统。 MCS-51 一般的开发环境是 IAR 和 Keil STM8 一般的开发环境是 IAR 和 ST

Clichong 1万+

petalinux i2c的配置

1.硬件平台配置 1.内核配置 cd petalinux-config -c kernel -> Device Drivers -> I2C support -> i2C Hardware Bus support -> Xilinx I2C Controller Pressing 启用CONFIG_I2C_XILINX=y 2.修改用户设备树 cd cd project-spec/meta-user/recipes-bsp/device-tree/files/ i2c2:

u013403954的博客 4313

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

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

weixin_30432007的博客 384

怎么定位K8s容器中运行的JAVA程序OOM异常(一)

一.前置环境 1. 运行在k8s集群上的Pod服务(Java程序) 2. MAT分析工具 二.利用Jmap工具导出Heap Dump 1.执行命令进入pod容器 kubectl exec -itn {namespace} {pod}} sh 2.利用jmap生成java程序的Dump文件 jps | grep {jar} ./jmap -dump:live,format=b,file=haep.hprof 8 3.利用k8s命令导出Dump文件到本地 kubectl cp -n

计算科学 3013

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

体验灵雀云-创建基于Docker的云服务

今天体验了一下灵雀云,创建了第一个基于Docker的云服务。 1.登录灵雀云 2.开始使用 登录之后,从"控制台"进入操作界面,开始创建服务。 首先需要选择一个镜像。灵雀云已经为您提供了一些常用的镜像列表。请在“常用镜像”列表中,选择“其它”,然后找到“alauda/hello-world”镜像,点击它右侧的“选择”按钮,进入服务参数配置页面。 选择完要创建的

tomcat的专栏 3234

Aurix TC3xx系列MCU ResourceM模块配置(多核资源分配)

为减轻主核的负载率或者平衡各个核的资源分配,通常需要把一些MCU内部资源分配到从核上,在EB tresos工具中,通过ResourceM模块实现多核资源分配。

m0_38045338的博客 1388

排查占用资源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的博客 376

基于相场法模拟金属铜的晶粒的长大过程附matlab完整代码

晶粒生长是一种重要的材料形态演化过程,对于材料的性能和制备有着非常重要的影响。相场法是一种将材料结构和热力学性质联系起来的方法,它能够有效地模拟晶粒的长大过程并预测材料的结构和性能。本文所采用的相场模型是基于Cahn-Hilliard方程和Allen-Cahn方程的二次相场模型。其中,Cahn-Hilliard方程描述了晶界的自由能密度,而Allen-Cahn方程则描述了晶粒的彼此之间的界面能密度。本篇文章将介绍如何使用相场法模拟金属铜的晶粒的长大过程,并提供完整的MATLAB代码供读者参考。

m0_47037246的博客 1383

CPU性能瓶颈分析方法:软件测试工程师实战指南

摘要:CPU性能瓶颈分析已成为测试工程师必备的核心技能。本文系统介绍了CPU性能指标体系(使用率、负载值、缓存命中率等)、分析工具(top/perf/火焰图等)及四步诊断流程,重点解析计算密集型、锁竞争和内存访问三类典型瓶颈场景。通过设计标准化性能测试方案,结合可视化数据呈现,测试人员可精准定位系统性能问题,为优化提供可靠依据。文章强调建立持续性能监控体系的重要性,助力测试团队从问题报告者升级为性能优化专家。

2501_94480392的博客 806

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚类型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2425

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

实时系统性能瓶颈诊断测试完整指南

实时系统性能瓶颈诊断对金融交易、工业控制等关键领域至关重要。本文系统介绍了性能瓶颈的理论框架、诊断方法和工具应用,涵盖CPU、内存、I/O三大核心层面及响应时间、吞吐量等关键指标。通过电商订单系统案例,展示了从监控发现到根因分析的全过程,提出数据库优化、缓存改进等解决方案。文章还探讨了AIOps智能监控趋势,建议测试团队建立性能基线库、集成CI/CD流程,形成闭环优化机制。性能诊断能力已成为测试人员的核心竞争力,需通过系统化方法提前识别风险、快速定位问题、持续优化系统。

2501_94480392的博客 923

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

软件测试技术之游戏性能测试指南

随着手游3D类型游戏增多,对机器资源占用越发高,但用户手中硬件的提升是一个不可控且缓慢的过程,为了保证在尽量广泛的机型上流畅运行,提高游戏本身的潜在用户群体,所以手游客户端性能测试工作就越发重要,如何做客户端性能审核,如何快速,专业,准确的做客户端性能审核是我们需要重点关注、且持续建设的内容。数据正确输出到前台显示的步骤,其经历CPU处理、内存管理、GPU处理,显存管理等阶段,若过程出现性能不佳,只有可能是中间的某一环节异常导致,而客户端性能审核(第一步)就需要定位具体是哪个环节异常。

Hacker_xingchen的博客 947

计算机控制技术及应用

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

资深测试老鸟,性能测试-线程死锁分析定位+Jprofiler分析CPU(详细)

1、线程死锁问题分析和定位死锁的根本原因:存在嵌套加锁;多个线程之间加锁(锁定对象资源)的顺序不一致;1)死锁的概念:有2个线程、一个线程锁住了资源A、又想去锁定资源B、另外一个线程锁定了资源B、又想去锁定资源A、2个线程都想去得到对方的资源、而又不愿释放自己的的资源、从而造成了一种互相等待3、无法执行的情况2)这个时候可以用jvisualvm或者jstack命令对线程进行dump3)jstack 进程号 > a.log 然后在本地打开a.log 在日志的最底部发现有2个http开头的线程。

大佬云集技术答疑交流群:743262921(进群暗号:222) 786

Jmeter 性能 —— 压测常遇问题,2024软件测试不死我不倒

T行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

2401_83621136的博客 533
上一篇: 性能测试之看懂这一个LoadRunner再无困难的脚本
下一篇: 性能测试之Moco 作为MockServer快速入门
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值