基于华为CCE环境下的Tomcat性能调优实践

发表于:2022-6-13 09:30

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

 作者:赵俊杰    来源:51Testing软件测试网原创

  CCE是华为公司提供的高度可扩展的、高性能的企业级Kubernetes集群,并能支持Docker容器生态。
  CCE可以轻松创建和管理多样化的容器工作负载,并提供容器故障自愈、监控日志采集、自动弹性扩容等高效运维能力。
  Tomcat是一个免费的、开源的、轻量级的Web应用服务器,支持JavaEE的Servlet和JSP规范以及HTML、JS等静态资源的处理,既可作为应用服务器运行Java Web应用,也可作为轻量级Web服务器使用。
  目前Tomcat是云上Java应用的主流中间件,典型应用如下图所示。

  本文通过梳理 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工具、全链路监控及应用中添加时间戳等方式定位响应时间长的方法。

  关键性能指标

  典型性能问题
  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;

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

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

  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错误。

  版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号