性能调优降本实例

news2024/9/24 17:19:41

降本思路

在A企业内部,线上业务稳定性标准为:达到业务核定TPS时,CPU利用率的峰值不超过60%,即为稳定状态。

在这个背景下,测试部门针对部分CPU消耗较高的系统进行了统一梳理和专项性能测试,旨在满足业务TPS要求时,通过性能测试及调优降低被测应用的峰值CPU利用率。若峰值CPU利用率出现明显下降,则减少部署节点的CPU核数,针对业务场景进行复测。若发现峰值CPU利用率依然低于60%且TPS无异常,则将生产环境部署节点的CPU核数减少,释放更多的资源用于其他业务的部署。配合生产监控手段,若在一定时间内无异常,则认为降本成功。

具体思路示意如图所示。

对图所示的降本步骤说明如下。

1)性能压测:对被测应用进行高并发压测。

2)性能评估:通过查看性能测试过程中的性能指标,评估其可能的优化点。性能指标包括TPS、响应时间、CPU利用率、内存占用率、代码响应时间、全链路拓扑等。

3)性能分析:包括如下3个维度。

❑针对CPU消耗较高的被测应用,进行CPU热点分析及线程追踪分析。以可视化报表查看应用在高CPU利用率时运行的代码段及线程ID,深度分析代码段源码及线程调用栈,定位高CPU利用率根因。

❑针对内存消耗较高的被测应用,通过内存透视分析,以低开销方法获取JVM的新生代、老年代、GC、堆外内存、内存对象、类对象等指标。通过可视化报表实时查看异常指标或曲线,分析与其对应的内存对象,定位根因。

❑针对代码响应时间长的被测应用,通过子方法调用分析,以实时字节码增强技术对代码中触发的子方法调用进行微秒级耗时分析。在定位至最耗时的代码段后,开启源码分析,查看源码逻辑并定位根因。

4)性能调优:针对找到的CPU、内存、线程、代码问题,与项目组沟通,进行修复。

5)降本验证:针对优化后的被测应用,使用相同的场景及并发数进行验证,确保被测应用的CPU指标、内存指标有所改善。针对已确认优化后的被测应用,降低CPU、内存配置,再使用相同场景及并发数进行性能测试,确认降配后的性能指标符合上线标准。

若降配后被测应用指标未达到上线标准,则从性能评估的步骤开始,再次进行分析。

降本案例

基于以上降本思路,A企业内部的实际系统调优过程如下。1)问题现象描述:在高并发压测场景下,系统中应用的平均CPU使用情况如图10-19所示,实际CPU利用率达到70.07%,最高达到100%。

图10-19 某应用CPU利用率2)定位过程描述:通过性能分析平台的热点分析,发现大部分CPU都消耗在日志爬栈操作过程中 

CPU热点分析图

 3)确定性能风险点:频繁的日志爬栈在高并发下会导致CPU消耗过大,影响整体应用体验。

4)提出优化建议:从开发规范角度来说,不建议通过行号来定位,因为这样做的成本太高,资源浪费太多,最好使用带有准确标志的输出日志字符串来明确哪段代码逻辑有问题。对于该案例,首先,建议将打印行号的参数%I、%L删除。其次,删除%method或者%m配置,目前Debug、Info、Warn、Error这些级别的日志使用的是同一套输出格式,即pattern配置相同,建议Debug和Info不要打印方法名和行号,直接打印Warn和Error就可以。

5)实际优化效果:通过修改配置,TPS从260笔/秒提升到320笔/秒,提升25%以上。

6)降本效果:应用服务器配置降低50%后,整体指标仍满足目标值。

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

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

相关文章

Linux 挂载

挂载需要挂载源和挂载点 虚拟机本身就有的挂源 添加硬件 重启虚拟机 操作程序 sudo fdisk -l //以管理员权限查看电脑硬盘使用情况sudo mkfs.ext4 /dev/sdb //以管理员身份格式化硬盘sudo mkdir guazai //创建挂载文件夹 sudo mount /dev/sdb/guazai //将挂载源接上挂载点 s…

【数据结构】堆排序详解

文章目录 一、堆排序思想二、向上调整建堆排序三、向下调整建堆排序四、总结 对于什么是堆,堆的概念分类以及堆的向上和向下两种调整算法可见: 堆的创建 一、堆排序思想 int a[] { 2,3,5,7,4,6 };对于这样一个数组来说,要想要用堆排序对它…

Webserver项目解析

一.webserver的组成部分 Buffer类 用于存储需要读写的数据 Channel类 存储文件描述符和相应的事件,当发生事件时,调用对应的回调函数 ChannelMap类 Channel数组,用于保存一系列的Channel Dispatcher 监听器,可以设置为epo…

分享一个基于微信小程序的社区生活小助手源码调试和lw,有java+python双版本

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

让NPU跑起来迅为RK3588开发板设置交叉编译器

让NPU跑起来迅为RK3588开发板设置交叉编译器 编译器下载地址是网盘资料“iTOP-3588 开发板\02_【iTOP-RK3588 开发板】开发资料 \12_NPU 使用配套资料\03_编译所需工具\Linux”。 拷贝 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.gz 到 Ubuntu 的/opt/tool_ch…

JavaScript中的`async`和`await`关键字的作用

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ async关键字⭐ await 关键字3. 错误处理 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对We…

中国汽车供应商远赴德国,中国智驾方案能否远渡重洋?

作者|Amy 编辑|德新 今年的上海车展,中国智能汽车的进步有目共睹,吸引了大批外企高管和研发人员的关注,甚至引发了海外车企一系列的动作和调整。 而在刚刚结束的慕尼黑车展,中国车企及汽车供应链把「肌肉」秀到了现代汽车起源地…

flask要点与坑

简介 Flask是一个用Python编写的Web应用程序框架,该框架简单易用、模块化、灵活性高。 该笔记主要记录Flask的关键要点和容易踩坑的地方 Flask 日志配置 Flask 中的自带logger模块(也是python自带的模块),通过简单配置可以实现…

浅谈拓展欧几里得算法

1、求特解 x 0 , y 0 x_0, y_0 x0​,y0​ 普通的欧几里得算法依据是辗转相除法,也就是,比如求 a , b a,b a,b 的最大公约数, a , b a,b a,b 进行辗转相除直到 a − b …

复盘:细数这些年写文字的成与败

引言 最近一直在思考和复盘,要说我这些年最后悔没坚持或者没做对的一件事就是没有好好写文字。时间过得很快,一晃笔者已经快毕业十年了,文章写得比较密集的时候还是大学时代和毕业头几年,后面输出就越来越少了,甚至一…

前端性能优化:提升网站速度与用户体验的终极指南

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 在今天的数字时代&#…

【C++ 学习 ㉑】- 详解 map 和 set(上)

目录 一、C STL 关联式容器 二、pair 类模板 三、set 3.1 - set 的基本介绍 3.2 - set 的成员函数 3.1.1 - 构造函数 3.1.2 - 迭代器 3.1.3 - 修改操作 3.1.4 - 其他操作 四、map 4.1 - map 的基本介绍 4.2 - map 的成员函数 4.2.1 - 迭代器 4.2.2 - operator[] …

避免使用违规词,企业新媒体营销应注重品牌形象维护

随着越来越多的主体入局新媒体平台,为了维护平台健康的内容生态和创造良好的社区氛围,社交平台在内容上的监管越发严格。 不可避免的,很多做新媒体营销的企业开始陷入与平台审核的“拉扯”之中。 为了让品牌账号在各平台上顺利运营&#xff0…

二十一、MySQL(多表)内连接、外连接、自连接实现

1、多表查询 (1)基础概念: (2)多表查询的分类: 2、内连接 (1)基础概念: (2)隐式内连接: 基础语法: select 表1.name,…

使用Oracle自带SqlPlus导入导出数据库脚本

sqlplus sys/passwordorcl as sysdba ----cmd 进入Oracle sqlplus 1、导入例子: imp username/username127.0.0.1:1521/orcl fileD:\datasource\username0919.dmp fully imp 用户名/密码127.0.0.1:1521/orcl fileD:\datasource\备份名字.dmp fully 2、导出例子&a…

Redis实战:在CentOS 7上安装部署与应用探索

PS:文章最后有“开心一刻”,记得看哦,给生活增加点儿趣味。 一、Redis初识 Redis,全称Remote Dictionary Server,是一个开源的键值对存储数据库。它支持多种数据类型,如字符串、列表、集合、有序集合、哈希…

SpringBoot-接口幂等性

幂等 幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。 尤其是支付、订单等与金钱挂…

进程创建fork函数

#include <sys/types.h> #include <unistd.h> pid_t fork(void); 函数的作用&#xff1a;用于创建子进程。 返回值&#xff1a; fork()的返回值会返回两次。一次是在父进程&#xff0c;一次是在子进程。 父进程中&#xff1a;返回创建的子进程的ID&#xff0c;返回…

ITIL 4指导、计划和改进—沟通和组织变革管理

第6章 沟通和组织变革管理 提供IT支持的产品和服务不仅是一种操纵技术的练习&#xff0c;而且是人类的努力。服务提供的各个方面都表现得更好&#xff0c;具有良好的沟通和对人为因素的关注。问题通常可以追溯到不正确、不匹配或时间错误的信息。人们需要帮助以适应变化中的组…

卖出看跌期权策略(Short Put)

卖出看跌期权策略&#xff08;Short Put&#xff09; 看跌期权的买家有权利按照期权的行权价卖出标的资产&#xff0c;看跌期权的卖家有义务按照期权的行权价买入标的资产。通过承担按照特定价格买入标的资产的义务&#xff0c;看跌期权的卖家可以收到期权的权利金&#xff0c…