• 1
  • 1
分享
  • 基于华为CCE环境下的Tomcat性能调优实践——软件测试圈
  • 曼倩诙谐 2022-06-14 09:51:06 字数 2016 阅读 1491 收藏 1

  CCE是华为公司提供的高度可扩展的、高性能的企业级Kubernetes集群,并能支持Docker容器生态。

  CCE可以轻松创建和管理多样化的容器工作负载,并提供容器故障自愈、监控日志采集、自动弹性扩容等高效运维能力。

  Tomcat是一个免费的、开源的、轻量级的Web应用服务器,支持JavaEE的Servlet和JSP规范以及HTML、JS等静态资源的处理,既可作为应用服务器运行Java Web应用,也可作为轻量级Web服务器使用。

  目前Tomcat是云上Java应用的主流中间件,典型应用如下图所示。

1-1.png

  本文通过梳理 CCE 下 Tomcat 的关键性能指标及监控方法,并总结了典型性能问题的调优思路,希望对云上应用的调优有所帮助。

  调优总体思路

  性能调优应从应用整体来分析问题,在排除数据库端性能问题的前提下,CCE上应用端的调优思路如下:

  1、分析应用端架构,从F5、Ingress、pod、Tomcat来逐个排查;

  2、F5需关注cpu负载、转发流量均衡情况及转发模式,F5 cpu负载过高会影响转发性能,转发流量不均衡会导致Ingress流量不均衡,进而导致pod负载不均衡;

  3、Ingress需关注 cpu和内存使用情况及Ingress转发流量均衡情况,Ingress

  cpu和内存异常均可导致应用性能下降,Ingress转发流量不均衡会导致pod负载不均衡,进而影响流经该交易的响应时间;

  4、应用pod需关注 cpu、内存使用情况及pod的重启次数,分析pod资源使用的异常情况,利用jstack工具定位CPU利用率高的线程堆栈信息,利用jmap生成的内存dump文件定位会用内存大的模块;

  5、Tomcat需检查线程池、连接池和JVM堆相关参数的配置和使用情况、GC的频率和次数,合理设置相关参数。

  除此之外,还可以借助APM工具、全链路监控及应用中添加时间戳等方式定位响应时间长的方法。

  关键性能指标

1-2.png

  典型性能问题

  pod cpu利用率偏高

  问题:性能测试过程中,发现pod cpu利用率偏高,不符合预期。

  调优思路:CPU利用率高,需要查看CPU消耗在User、Sys、Wait的情况。如果CPU User非常高,可以通过top命令查看哪个线程消耗资源高,Java应用可以用jstack看出此线程正在执行的堆栈,看资源消耗在哪个方法上。

  如果CPU Sys非常高,可以用strace(Linux)看系统调用的资源消耗及时间;如果CPU Wait非常高,需考虑磁盘读写。

  定位Tomcat线程堆栈信息的步骤如下:

  1、先通过ps -ef|grep Tomcat查看进程id;

  2、再通过top -Hp 进程id 命令查看cpu使用率高的线程id;

1-3.png

  3、将线程id转换为16进制数据;

1-4.png

  4、使用jsack命令查看cpu使用率高的线程堆栈信息。

1-5.png

  JVM堆内存使用率较高

  问题:某系统性能测试过程中JVM堆内存使用率持续升高,超过了阈值。

  调优思路:一般若CPU资源消耗正常但监控发现JVM堆内存过高一般从几个角度分析:

  一是堆内存大小配置过小,未能发挥资源优势;

  二是应用存在死循环;

  三是应用阻塞,等待队列不断增大。

  具体排查步骤如下:

  1、检查JVM的Xmx、MaxMetaspaceSize等参数配置;

  2、观察JVM内存曲线是否匀速上升,确认应用是否存在死循环逻辑;

  3、分析故障时点dump内存快照。

  (1)使用jmap工具生成dump内存快照,在堆内存使用率较低和较高时分别两次dump内存,对比快照中的内存使用情况;

  (2)将dump文件导出本地,使用jvisualvm等工具分析,或使用JDK自带的jhat分析,查看应回收但未回收的内存,分析其引用链,查看内存未及时回收的原因。

  HTTP 502错误

  问题:某交易在性能测试过程中,出现少量失败交易,性能测试工具获取响应报错为502 Bad Gateway。

  调优思路:502表示ingress从后端服务接收到无效的响应,需要检查ingress的配置和tomcat配置中关于超时的配置项。

  检查ingress超时参数upstream keepalive_timeout和tomcat配置连接超时时间 connectionTimeout,若connectionTimeout<upstream keepalive_timeout,则tomcat的连接会先于ingress断开,此时ingress转发http请求到tomcat,tomcat会拒绝,报502错误,部分应用调整ingress超时参数值小于tomcat的连接超时参数值,可解决502错误。



作者:赵俊杰   

来源:http://www.51testing.com/html/30/n-7191530.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • WEB测试和APP测试从流程上来说,没有区别。都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动。从技术上来说,WEB测试和APP测试其测试类型也基本相似,都需要进行功能测试,性能测试,安全性测试,GUI测试等测试类型相同点:不管是传统行业的web测试,还是新兴的手机app测试,都离不开测试的基础知识:同样的设计测试用例方法:边界值分析法、等价类划分法、错误推测法、场景法等同样的测试方法:黑盒测试,验证业务功能是否正确符合用户或者设计预期;都要检查UR:界面的布局、风格和按钮等是否简洁美观、是否统一等;页面性能检测:测试页面载入和翻页的速度、登陆时长、内存是否溢出等;应用...
            13 14 2252
            分享
          •   IEEE Spectrum 出炉了 2022 年度最受欢迎编程语言排名。该排名最初由数据记者 Nick Diakopoulos 于 2013 年创建,今年是第九届。当前版本由 IEEE Spectrum 高级编辑 Stephen Cass 维护,并得到 Prachi Patel 和 Michael Novakovic 的开发支持。  作为业内比较权威的交互语言排行榜,本次排名结合了包括谷歌搜索、推特、Stack Overflow、Reddit、IEEE、GitHub 等 8 个来源的 9 项指标,共上榜了 57 种语言。关于指标,例如在 Stack Overflow 中,程序员可以在其中询...
            0 0 848
            分享
          •   通用的测试管理过程主要可以分为三个部分:测试计划、测试监控和控制、测试完成。  从研发项目角度出发,测试管理过程可以用于不同级别的项目测试管理。  从测试阶段出发,测试管理过程可以用于不同测试阶段的测试管理,如集成测试、系统测试、验收测试等。  从测试类型出发,测试管理过程可以用于不同类型的测试管理,如功能测试、性能测试。  测试计划过程  测试计划过程用于制定测试计划。根据测试计划过程在项目中所处的位置不同,可以分为整体的测试计划(如系统测试计划),或某个类型的测试计划(如性能测试计划)。  创建一个测试计划,可以参考如下图1所示的过程。图1 测试计划过程  上图中箭头文字表示的是每一个...
            0 0 738
            分享
          •   最近一个学生也可以说是朋友,他遇到了一个让他困扰的职场难题,背景如下:  1)他们公司准备搞安全测试了,现在有人员培训的计划,所以全组有学习安全测试课程的安排。  2)他自己目前专职性能测试1年了,现在他领导有意想把他往安全测试的方向发展,但是他自己内心是排斥安全测试的,但是又不好拒绝领导的好意。  3)自己不想去安全,不是因为不感兴趣,而是因为目前阶段自己觉得性能还没完全摸清楚,现在又进入另外一个陌生的领域,心里没底。  4)且公司内部目前打算培养3个人做安全测试,他从性能部门转过去从零开始学习安全测试。  5)自己也不清楚安全测试的发展情况,非常头疼。目前就只想好好把性能搞好。  6)...
            0 1 805
            分享
          • 1、性能测试常见指标内存CPU流量电量启动速度滑动速度界面切换速度与服务器交互的网络速度通常Android对上面的关注点会更多一些,毕竟… 你懂得!2、预期标准指定原则分析竞品,所期望指标与竞品的差值或超过竞品满足产品经理给出的预期性能指标符合业内标准3、工具及方法内存:        方法:使用adb shell脚本进行测试,查看Log数据        命令:adb shell dump meminfoCPU:  &nbs...
            1 0 17798
            分享
      • 51testing软件测试圈微信