性能问题的定位分析(三)——大话性能测试(24)

发表于:2022-7-22 09:53

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:胡通    来源:51Testing软件测试网原创

  3.性能常见问题和案例
  当性能测试实战经验丰富后,会发现常见的性能问题可以分为3类——CPU类、内存类和配置 类,这里不考虑架构设计的合理性。
  CPU类。代码或MySQL都可能会导致CPU爆满。CPU利用率高不是问题,由CPU利用率高 引起的负载高才是问题,负载是判断系统能力指标的依据。
  为什么这么说呢?以单核CPU为例,我们日常的CPU利用率在20%?30%,这其实是浪费CPU 资源的,这意味着绝大多数时候CPU并没有在做事。理论上,一个系统极限的CPU利用率可以达 到100%,这意味着CPU完全被利用起来处理计算密集型任务了,例如for循环、md5加密、新建 对象等。但是实际不可能出现这种情况,因为应用程序中不存在消耗CPU的IO是几乎不可能的, 例如读取数据库或者读取文件,所以CPU利用率不是越高越好,通常75%是一个需要引起警戒的 经验值。
  例如,服务部署在阿里云上,某天突然收到告警通知,CPU利用率超过阈值75%,连续告警一 段时间。
  在一个Java应用中,排査CPU利用率高的思路通常比较简单,有比较固定的做法,实际排查问 题的时候建议打印jstack命令结果5次(至少3次),根据多次的栈内容,再结合相关代码段进行分 析,定位高CPU利用率出现的原因。高CPU利用率可能是代码段中某个bug导致的而不是栈打印 出来的那几行导致的。
  (1)通过top命令找出CPU资源消耗过高的进程。
  top H打开线程显示开关。
  (2)找出进程对应的线程:
ps -mp pid -o THREAD,tid,time
  (3)其次,将需要的线程ID转换为十六进制格式:
printf "%x\n" tid
  (4)打印线程栈信息:
j stack pid |grep tid -A 30
  (5)据此找到对应的代码逻辑。
  根据以上常规的利用jstack定位CPU的问题套路,我们编写了如代码清单1-3所示的脚本。
代码清单 1-3 jstack_check.sh
  执行上述脚本后的结果如下,通过分析我们可以迅速找到相关代码,然后相应地去解决问题。
  注意
  不同的系统用途也不同,要找到性能瓶颈需要知道系统运行的是什么应用、有什么特点,例如 Web服务器对系统的要求肯定和文件服务器不一样,所以分清不同系统的应用类型很重要,通常应 用可以分为两种类型。
  一种是IO相关的应用,通常用来处理大量数据,需要大量内存和存储,频繁IO操作读写 数据,而对CPU的要求则较少,大部分时候CPU都在等待硬盘,例如数据库服务器、文件服 务器等。
  另一种是CPU相关的应用,需要使用大量CPU,例如高并发的Web/邮件服务器、图像/视频处 理、科学计算等都可被视为CPU相关的应用。
查看《大话性能测试》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号