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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 面试官常问问题1、描述一下软件测试活动周期答案:需求评审—测试计划、方案制定—编写测试用例—执行测试用例—缺陷提交、跟踪—伦次回顾、输出测试报告。2、请描述一个bug周期答案:对于我们公司来说,bug创建及关闭是比较规范的,首先是先创建、提交一个缺陷到缺陷管理平台,然后制定给对应的开发负责人修改;等到开发修改完成后,我们会使用开发提供的程序进行验证,如果bug已经解决的话,那么我们会关闭这个bug,如果没有真正解决的话,那就重新打回给对应的开发重新进行解决。3、测试人员在软件开发过程中的任务是什么?答案:1、尽可能早的找出系统中的缺陷  2、避免软件开发过程中缺陷的出现&n...
            0 0 1266
            分享
          • 软件测试中什么是冒烟测试?什么时候执行冒烟测试?怎么执行冒烟测试?冒烟测试与回归测试的区别是什么呢?何为冒烟测试?这一术语源自硬件行业,是对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。如果冒烟了,该硬件组件亦为废品。那么在软件测试中,“冒烟测试”这一术语描述的是在将代码更改集成到产品系统中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改是否按预期运行,且不会破坏整个版本的稳定性。简单点就是,发现BUG后开发人员修复BUG后,测试人员针对该BUG进行再次测试。冒烟测试的成功与...
            1 1 2438
            分享
          •   前言  通常在接口自动化中,经常会参数关联的问题,那么什么是参数关联?  参数关联就是上一个接口的返回值会被下一个接口当做参数运用,其中Python中可以实现参数关联的方法有很多种,今天小编给大家介绍下,如何通过Python来实现接口自动化中的参数关联。  UnitTest  虽然说目前Pytest框架比较流向,但是目前应该有绝大部分公司还是在使用UnitTest框架,那么小编先介绍下如何通过UnitTest来实现接口自动化的参数关联。  方法一  下面小编通过测试用例返回参数的形式进行实现参数关联。# coding:utf-8 import requests impo...
            0 0 1454
            分享
          •   一、定义:以执行组织的名义支持过程的持续改进活动  核心理念:兼顾项目管理和可交付成果两方面。  质量影响程度(代价由大到小):客户发现缺陷 > 交付前检测和纠正缺陷(验收或回归) > 检查并纠正过程本身 > 质量融入规划和涉及 > 质量文化  项目管理(过程优化)和项目可交付产品(质量治理)。  iso9000里质量是指一系列内在特性满足要求的程度;等级约定于优先级。  质量成本:产品生命周期中预防不符合要求、为评价产品或服务是否符合要求以及未达到要求(返工)的发生成本。  · 预防和评估成本:一致性成本。  · 劣质成本:内部团队发现的问题和外部用户发...
            0 0 1222
            分享
          •   关于Gato  Gato是一款针对GitHub的信息枚举和渗透测试工具,该工具是一个GitHub自托管的安全测试工具。在该工具的帮助下,广大蓝队研究人员或渗透测试安全研究人员就可以轻松评估目标组织的GitHub安全性,并尝试枚举其中存在安全问题的个人访问令牌或其他安全问题。  值得一提的是,GitHub建议仅将自托管运行程序用于私有存储库,然而有成千上万的组织仍然会在公共代码库中使用自托管运行程序。因此,该工具还可以搜索并枚举使用了自托管运行程序的GitHub公共存储库。  功能介绍  1、GitHub PAT特权枚举;  2、基于API的GitHub代码搜索枚举;  3、GitHub A...
            0 0 886
            分享
      • 51testing软件测试圈微信