性能测试-压测问题分析,生产环境性能压测优化(详细)

news2024/11/9 9:57:14

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

项目背景:
1、服务器的硬件配置(48核120G内存2T硬盘);
2、网络部署结构,用户请求报文首先进入负载均衡Nginx,Nginx后端负载两台Tomcat。

现象描述:
对线上的两台服务器做性能压测时,单台Tomcat的QPS达到600左右处理业务就明显变慢,一次请求处理时间大约上升到七秒左右(正常情况下一秒内就处理完成),给人的感觉就是Tomcat跑不动。

优化过程:
1、查看Tomcat和Nginx各自的log日志,发现Nginx的日志中有大量的“worker_connections are not enough while connecting to upstream”,错误信息已明确给出了提示,因此修改配置文件nginx.conf,修改为:

worker_processes  auto;
events {
    worker_connections  10240;
}

2、继续压测时,当QPS达到600时,发现Tomcat处理业务仍然很慢,查看ngxin的日志一切正常并无任何线索,把重心转向Tomcat,查看Tomcat日志,日志打印的非常慢,特别是定位到两条相隔很近的日志间所需时间都在2秒左右,而且这两条日志在代码层面相隔很近,中间也无耗时的业务逻辑。

第一反应是jvm的参数设置的不合理,于是就去查看gc的日志,并改动JVM的参数,但是多次调优JVM后QPS仍然未有明显提升。

修改后的jvm参数:

JAVA_OPTS="-server -Xmx32g -Xms32g -Xmn12g -Xss256k -XX:SurvivorRatio=6 
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:MaxGCPauseMillis=n -XX:CMSInitiatingOccupancyFraction=60 -XX:CMSTriggerRatio=70 
-XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/home/xiaoju/logs/stargate-service/gc/gc_${DT}.log -XX:+PrintHeapAtGC"

3、既然排除JVM和业务代码的原因,把目标又锁定在了日志框架上,我们的业务代码中引用了log4j(版本1.12.7)框架进行日志操作,在log4j的官网上找到了对性能影响的因素,见官网Performance菜单下的如下章节所示
Asynchronous Logging with Caller Location Information

也就是说如果在日志信息中打印location信息(例如:包名、类名、函数名称和行号)(即:在log4j的配置文件中,配置了%C or $class, %F or %file, %l or %location, %L or %line, %M or %method),会严重影响log4j的性能。

跟踪log4j源码后发现,log4j为了拿到函数名称和行号信息,利用了异常机制,首先抛出一个异常,之后捕获异常并打印出异常信息的堆栈内容,再从堆栈内容中解析出行号,代码截取如下:

/**
     Set the location information for this logging event. The collected
     information is cached for future use.
   */
  public LocationInfo getLocationInformation() {
    if(locationInfo == null) {
      locationInfo = new LocationInfo(new Throwable(), fqnOfCategoryClass);
    }
    return locationInfo;
  }

我们知道,Java的异常机制很耗性能(注意:如果单纯的是new异常并抛出并未耗性能,如果对异常栈进行操作,如打印输出则很耗性能),因此我们将log4j的配置文件去掉了函数名称和行号打印后,性能QPS立马提升到了2500。

4、在log4j的配置文件中去掉log4j的location信息后,继续压力测试,待QPS达到2500后服务器又会报服务超时的错误,通过看log4j官网文档中的性能章节,发现console对性能的影响也会非常大,因此在log4j的配置文件中又将console关闭了,继续压测后QPS性能达到8000左右了。

5、在log4j的配置文件中关闭location信息和关闭console后,继续压力测试进行优化,发现日志文件的大小也会影响到性能,建议控制日志文件的大小或者采用日志追加的方式;

同时将日志改为异步打印也会有性能提升有所帮助。(在我们测试的过程中,日志文件大小和异步打印,对性能的提升有限,不如去掉location信息和关闭console那么明显)。

小结:

在Java语言中,凡是涉及到行号信息的获取,只能通过构造异常new Throwable()抛出,之后在函数内部通过异常或上层捕获异常来拿到栈信息,从栈信息中解析出行号信息,因此在Java中凡是涉及到行号信息的获取操作,都非常的耗性能,这一点尤其要注意。

log4j影响性能的程度依次为:日志的location信息(如:行号函数名) > console(关闭日志输出到控制台) > 异步打印 > 日志文件的大小(日志追加模式)。
线上环境如果对性能有一定要求的话,建议关闭location和console控制台。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只要有梦想,就有希望;只要努力,就有可能。不管前路多么艰辛,只要坚持奋斗,成功的曙光一定会照亮你的前方。相信自己,勇敢追逐,终将收获辉煌的人生。加油!

只要你勇敢的迈出第一步,人生的道路就会无限延伸。不论遇到多少困难和挑战,都要坚持下去。每一次努力都是积累,每一次坚持都是进步。相信自己,相信奇迹,为了梦想,奋斗不止。加油!

只要心中有梦想,就有无尽的力量支撑你前行。不怕困难,不畏挫折,坚持努力,胜利将属于你。每一天的付出都是成长的痕迹,每一次的拼搏都是人生的华章。相信自己,为梦想努力奋斗!加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1精通自动化测试,pytest自动化测试框架,allure2生成html报告(史上最详细)(九)

一、前言 allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。 环境准备: python3.6windows环境pycharmpytest-allure-adaptorallure2.7.0java1.8 二、pytest-allu…

在 Blender 和 3DCoat 中创建风格化的幻想屋

今天云渲染小编给大家带来的是CG艺术家Brian Nguyen 最近的项目“一个风格化的幻想屋”幕后制作,讨论了 Blender 中的建模过程和 3DCoat 中的纹理过程,并详细介绍了如何设置灯光和K动画。 介绍 我是 Brian Nguyen,程式化的 3D 艺术家&#…

阿里云EMAS超级App助力Agmo电动车超级应用程序发布

近日,阿里云宣布与马来西亚本土数字方案专家Agmo控股(Agmo Holdings Berhad,简称Agmo)展开合作,签署谅解备忘录,联手推出马来西亚首个Agmo电动车超级应用程序。此次合作也标志着阿里云在中国以外的市场首次…

电商营销小程序优势有哪些?电商营销小程序功能推荐

随着流量成本越来越高、流量逐渐被平台所垄断,因此转化公域流量至私域成为越来越多企业的选择,对于电商营销而言,电商营销小程序也是一种较为轻便的私域沉淀工具。与传统的电商模式相比,电商营销小程序具有以下几大优势&#xff1…

【嵌入式】MIMXRT685SFVKB 32位微控制器、5CGXFC4C7F27C8N FPGA现场可编程门阵列

MIMXRT685SFVKB i.MX RT600交叉MCU是双核微控制器,设有32位Cortex-M33和Xtensa HiFi4音频DSP CPU。i.MX RT600 MCU是NXP EdgeVerse™边缘计算平台的一部分。Cortex-M33 CPU配有两个硬件协处理器,为一系列复杂算法提供增强性能。 核心处理器:A…

【博客671】prometheus如何选择数据点以及处理counter跳变

prometheus如何选择数据点以及处理counter跳变 1、prometheus如何选择数据点 时间是怎么进来的?范围和即时查询! 您可能已经注意到,PromQL 查询中对时间的唯一引用是相对引用(例如[5m],回顾 5 分钟)。那…

嵌入式界面神器 littleVGL

​1、littleVGL 介绍 littleVGL 是近几年开始流行的一个小型开源嵌入式 GUI 库,具有界面精美,消耗资源小,可移植度高,响应式布局等特点,全库采用纯 c 语言开发,而且 littleVGL 库的更新速度非常快,随着 littleVGL 的认知度越来越大,官方资料也逐渐丰富起来。 相比 emWin&…

kali安装Nessus并更新插件包的详细步骤

1. 下载 https://www.tenable.com/downloads/nessus 2. 安装 dpkg -i Nessus-10.5.2-debian10_amd64.deb3. 开启nessus服务 sudo systemctl start nessusd.service4. 浏览器访问Nessus服务 访问 https://$ip:8834选择Managed Scanner,点击Continue选择Tenable.sc,点击Con…

Linux Perf

文章目录 一、简介二、使用方法1、子命令2、Tips 三、perf-list1、事件类型2、事件修饰符 四、perf-top1、输出结果2、选项3、交互命令4、示例 五、perf-stat1、选项2、示例 六、perf-record1、选项2、示例 七、perf-report1、选项2、示例 八、perf-script1、选项2、示例3、火焰…

SpringBoot(一)使用itelliJ社区版创建SpringBoot项目

工欲善其事,必先利其器。目前市面上有很多优秀的开发工具,例如 IntelliJ IDEA、Visual Studio Code 和 Eclipse 等,那么我们该如何选择呢?最好的选择是使用IntelliJ IDEA的Ultimate版本,但Ultimate版本试用期只有30天&…

【JavaWeb基础】RestController的使用

一、学习笔记 RestControllerControllerResponseBody 其中,ResponseBody将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为Json格式响应。 二、代码展示 创建两个类 代码如下: package com.example.controller…

高效视频解码,使用MediaCodec解析H.265

MediaCodec是什么 MediaCodec是Android平台上的一个类,用于实现多媒体数据的编解码操作。它提供了对底层硬件编解码器的访问和控制,可以实现高效的音视频编解码处理,包括解码和编码功能。 通过使用MediaCodec,开发人员可以利用硬…

在多台服务器上运行相同命令

文章目录 PSSH安装使用(1)、定义一个文件,写入需要操作的机器,如pssh-hosts(2)、pssh执行命令(3)、参数含义(4)、pscp从96.54拷贝文件到其他机器(5)、pslurp从其它机器下载文件到本地(6)、pnuke 杀死远程主机上的进程 ansible安装使用(1)、安装完后&…

兼容性测试如何提高网站的性能?

随着互联网的持续发展,越来越多的公司和组织都开始关注网站的性能问题。一个高效的网站不仅可以提高用户满意度,促进业务的发展,还可以提高搜索引擎的排名,为公司带来更多的流量和收益。而兼容性测试是提高网站性能的关键之一&…

SECS协议学习

1.SECS介绍 SEMI(国际半导体协会)为了方便工厂系统与设备沟通而建立的一种通信标准 2.SECS常用功能 2.1.设备向工厂系统报告设备状态(自动、暂停、初始化、报警,特殊事件:如门开启等) 2.2.远程控制设备&#xff0…

实录分享 | Alluxio Operator一体化部署方案

今天给大家分享的内容是 Alluxio Operator的一体化部署方案。我会将内容分成 4 个部分来给大家讲解。 首先,介绍 Kubernetes 容器化部署和当前所面临的挑战。 然后,引入operator的概念,介绍当前业界关于Kubernetes 容器化部署问题的主流解决…

好用的web可视化报表工具

随着数字化程度加深,数据可视化成为数据分析中不可或缺的重要组成部分,可视化图表能非常直观地为管理者和决策者提供有效的企业信息,因此找到一款好用的数据可视化工具尤为重要! 中国式报表设计 报表可视化操作界面,…

Docker容器日志管理详解

1. 简介 Docker容器日志是指容器在运行过程中产生的各种日志信息,包括错误、警告、信息等。Docker将所有容器的日志统一管理,方便用户对容器进行监控、故障排查和性能分析。 1.1 什么是Docker容器日志 Docker容器日志是容器在运行过程中产生的各种日志…

推荐5款非常小巧精致的免费软件

今天继续分享5个超实用的小工具,都是非常小巧精致的免费软件。 开源三维建模——Blender ​ Blender是一个开源的三维建模和动画软件,可以用于制作游戏、电影、广告等。它拥有丰富的建模、雕刻、纹理、渲染、动力学、模拟等功能,以及内置的…

Sequential用法

目录 1.官方文档解释 1.1原文参照 1.2中文解释 2.参考代码 3.一些参考使用 3.1生成网络 3.2 感知机的实现 3.3组装网络层 1.官方文档解释 1.1原文参照 A sequential container. Modules will be added to it in the order they are passed in the constructor. A…