如何制定性能调优策略

目录

性能测试攻略

微基准性能测试

宏基准性能测试

热身问题

多 JVM 情况下的影响

合理分析结果,制定调优策略

推荐阅读


性能测试攻略

   性能测试是提前发现性能瓶颈,保障系统性能稳定的必要措施。下面我先给你介绍两种常用 的测试方法,帮助你从点到面地测试系统性能。

微基准性能测试

   微基准性能测试可以精准定位到某个模块或者某个方法的性能问题,特别适合做一个功能模 块或者一个方法在不同实现方式下的性能对比。例如,对比一个方法使用同步实现和非同步 实现的性能。

宏基准性能测试

宏基准性能测试是一个综合测试,需要考虑到测试环境、测试场景和测试目标。

首先看测试环境,我们需要模拟线上的真实环境。

   然后看测试场景。我们需要确定在测试某个接口时,是否有其他业务接口同时也在平行运 行,造成干扰。如果有,请重视,因为你一旦忽视了这种干扰,测试结果就会出现偏差。

   最后看测试目标。我们的性能测试是要有目标的,这里可以通过吞吐量以及响应时间来衡量 系统是否达标。不达标,就进行优化;达标,就继续加大测试的并发数,探底接口的 TPS(最大每秒事务处理量),这样做,可以深入了解到接口的性能。除了测试接口的吞吐 量和响应时间以外,我们还需要循环测试可能导致性能问题的接口,观察各个服务器的 CPU、内存以及 I/O 使用率的变化。

以上就是两种测试方法的详解。其中值得注意的是,性能测试存在干扰因子,会使测试结果 不准确。所以,我们在做性能测试时,还要注意一些问题。

热身问题

   当我们做性能测试时,我们的系统会运行得越来越快,后面的访问速度要比我们第一次访问 的速度快上几倍。这是怎么回事呢?

   在 Java 编程语言和环境中,.java 文件编译成为 .class 文件后,机器还是无法直接运行 .class 文件中的字节码,需要通过解释器将字节码转换成本地机器码才能运行。为了节约内 存和执行效率,代码最初被执行时,解释器会率先解释执行这段代码。

    随着代码被执行的次数增多,当虚拟机发现某个方法或代码块运行得特别频繁时,就会把这 些代码认定为热点代码(Hot Spot Code)。为了提高热点代码的执行效率,在运行时, 虚拟机将会通过即时编译器(JIT compiler,just-in-time compiler)把这些代码编译成与本地平台相关的机码,并进行各层次的优化,然后存储在内存中,之后每次运行代码时, 直接从内存中获取即可。

所以在刚开始运行的阶段,虚拟机会花费很长的时间来全面优化代码,后面就能以最高性能 执行了。

   这就是热身过程,如果在进行性能测试时,热身时间过长,就会导致第一次访问速度过慢, 你就可以考虑先优化,再进行测试。

JVM 情况下的影响

   如果我们的服务器有多个 Java 应用服务,部署在不同的 Tomcat 下,这就意味着我们的服 务器会有多个 JVM。任意一个 JVM 都拥有整个系统的资源使用权。如果一台机器上只部署 单独的一个 JVM,在做性能测试时,测试结果很好,或者你调优的效果很好,但在一台机 器多个 JVM 的情况下就不一定了。所以我们应该尽量避免线上环境中一台机器部署多个 JVM 的情况。

合理分析结果,制定调优策略

   这里我将“三步走”中的分析和调优结合在一起讲。

   我们在完成性能测试之后,需要输出一份性能测试报告,帮我们分析系统性能测试的情况。 其中测试结果需要包含测试接口的平均、最大和最小吞吐量,响应时间,服务器的 CPU、 内存、I/O、网络 IO 使用率,JVM 的 GC 频率等。

  通过观察这些调优标准,可以发现性能瓶颈,我们再通过自下而上的方式分析查找问题。首 先从操作系统层面,查看系统的 CPU、内存、I/O、网络的使用率是否存在异常,再通过命 令查找异常日志,最后通过分析日志,找到导致瓶颈的原因;还可以从 Java 应用的 JVM 层面,查看 JVM 的垃圾回收频率以及内存分配情况是否存在异常,分析日志,找到导致瓶 颈的原因。

   如果系统和 JVM 层面都没有出现异常情况,我们可以查看应用服务业务层是否存在性能瓶 颈,例如 Java 编程的问题、读写数据瓶颈等等。 分析查找问题是一个复杂而又细致的过程,某个性能问题可能是一个原因导致的,也可能是 几个原因共同导致的结果。我们分析查找问题可以采用自下而上的方式,而我们解决系统性 能问题,则可以采用自上而下的方式逐级优化。下面我来介绍下从应用层到操作系统层的几 种调优策略。


推荐阅读

业务幂等性技术架构体系

记一次线上SQL死锁事故:如何避免死锁

亿级在线百万并发认证业务分析

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

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

相关文章

HarmonyOS-ArkUI V2装饰器@Local装饰器:组件内部状态

@Local装饰器的作用 @Local装饰器是用来装饰组件内的状态的。而且它修饰的变量可以成为数据源。Local装饰器,作用跟名字差不多,重点突出了“本地”的特性,也就是使用的范围仅仅限制在组件内部。且它在初始化的时候必须是在本地进行初始化的,不能在外部组件,同时也禁止了外…

Linux线程属性与多线程开发:API详解与实战代码解析

Linux 线程的属性 线程池 多线程的创建 线程的属性 引入 我们设想一个场景,使用pthread_detach时,发现线程早就已经结束了,这时候pthread_detach还能正常发挥清理线程的 独有空间 的作用吗? 答案是可以的,但是这难…

测试第二课-------测试分类

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

MySQL安装实战分享

一、在 Windows 上安装 MySQL 1. 下载 MySQL 安装包 访问 MySQL 官方下载页面。选择适合你操作系统的版本。一般推荐下载 MySQL Installer。 2. 运行安装程序 双击下载的安装文件&#xff08;例如 mysql-installer-community-<version>.msi&#xff09;。如果出现安全…

数据库预热

介绍 Database Warm-up &#x1f9e0; 一句话理解 数据库是在应用启动阶段&#xff0c;提前建立数据库连接 或 执行轻量 SQL 操作&#xff0c;从而 加快首个请求的响应速度 的一种优化手段 &#x1f3af; 为什么需要数据库预热&#xff1f; 当 FastAPI 或其他 Web 服务刚启…

SearXNG

SearXNG 什么是 SearXNG &#xff1f;说白了&#xff0c;其实就是一个免费开源的搜索引擎。那为什么要本地安装它呢&#xff1f; 看它官网的解释(翻译)&#xff0c;当然&#xff0c;其中官方也有一篇文档解释了为什么需要部署使用私有示例&#xff1a;为什么使用私有实例&…

js 颜色转换分析

一、十六进制转RGB function hexToRgba(hex) {// 移除 # 字符hex hex.replace(#, );// 处理简写形式如 #fffif (hex.length 3) {hex hex[0] hex[0] hex[1] hex[1] hex[2] hex[2];}// 转换为十进制const r parseInt(hex.substring(0, 2), 16); // 截图前两位&#xff0…

智能资源管理机制-重传机制

一、发送端资源管理的核心机制 1. 滑动窗口&#xff08;Sliding Window&#xff09; 这是TCP协议的核心优化设计&#xff1a; 窗口动态滑动&#xff1a;发送端不需要保留所有已发送的分组&#xff0c;只需维护一个"发送窗口"窗口大小&#xff1a;由接收方通告的接…

基于SSM+Layui毕业设计选题系统源码

项目介绍 基于SSM+Layui毕业设计选题系统源码,可以作为课程设计项目参考,该系统分为三个角色: 管理员:用户管理(对学生和老师的信息进行维护),统计分析(对老师课题情况以及学生选题情况信息进行维护),修改密码 老师:个人信息维护,毕业设计题目管理,报名学生管理…

通过uri获取文件路径手机适配

青铜版本 return contentResolver.query(this, arrayOf(MediaStore.MediaColumns.DATA), null, null).let {if (it?.moveToFirst() true) {val columnIndex it.getColumnIndex(MediaStore.MediaColumns.DATA)val path it.getString(columnIndex)it.close()return path}&quo…

vue模拟扑克效果

vue模拟扑克效果 效果图&#xff1a; step1:C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue <template><div class"poker-container"><!-- 使用复合数据对象实现双行显示 --><divv-for"(card, index) in POKER_…

基础数学:图论与信息论

微积分与概率论由此进&#xff1a;基础数学&#xff1a;微积分和概率与统计-CSDN博客 线代与优化理论由此进&#xff1a;基础数学&#xff1a;线性代数与优化理论-CSDN博客 数值分析与离散数学由此进&#xff1a;基础数学&#xff1a;数值分析与离散数学-CSDN博客 四、图论与…

构建智能期货交易策略分析应用:MCP与AI的无缝集成

引言 随着金融科技的快速发展&#xff0c;数据驱动的交易决策已成为期货交易领域的重要趋势。本文将深入探讨一个结合了Model Content Protocol (MCP)和AI技术的期货交易策略分析应用——Futures MCP。该应用不仅提供了丰富的技术分析工具&#xff0c;还通过MCP协议与大型语言…

0x02.Redis 集群的实现原理是什么?

回答重点 Redis 集群&#xff08;Redis cluster&#xff09;是通过多个 Redis 实例组成的&#xff0c;每个主节点实例负责存储部分的数据&#xff0c;并且可以有一个或多个从节点作为备份。 具体是采用哈希槽&#xff08;Hash Slot&#xff09;机制来分配数据&#xff0c;将整…

基本的DOS命令

一.打开CMD方式&#xff1a; winR 输入cmd 开始系统命令提示符 在任意文件夹下&#xff0c;shift&#xff0b;鼠标右击&#xff0c;在此处打开命令 资源管理器的地址栏前面输入cmd 以管理员身份打开cmd&#xff1a;选择以管理员方式运行 二.常用的Dos命令 #盘符切换 盘符…

深度剖析:架构评估的常用方法与应用

架构评估是确保系统架构满足需求、性能和质量等方面要求的重要环节&#xff0c;以下是一些常见的架构评估方法的详细介绍&#xff1a; 一、基于调查问卷或检查表的评估方法 1.方法概述&#xff1a;该方法通过设计一系列针对性的问题或检查项&#xff0c;形成问卷或检查表&…

代码随想录算法训练营第十六天

LeetCode题目: 530. 二叉搜索树的最小绝对差501. 二叉搜索树中的众数236. 二叉树的最近公共祖先3272. 统计好整数的数目(每日一题) 其他: 今日总结 往期打卡 530. 二叉搜索树的最小绝对差 跳转: 530. 二叉搜索树的最小绝对差 学习: 代码随想录公开讲解 问题: 给你一个二叉搜…

基于双闭环PID控制器的永磁同步电机控制系统匝间故障Simulink仿真

欢迎微♥关注“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2013Rb&#xff09;软件。建议采用matlab2013 Rb及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff0c;高于该版本的matlab均可正…

02-libVLC的视频播放器:播放音视频文件以及网络流

libvlc_new(0, nullptr)功能:创建并初始化libVLC的核心实例,是使用所有libVLC功能的前提。 参数:第一个参数:参数数量(通常设为0)第二个参数:参数列表(通常为nullptr,表示使用默认配置)返回值:成功返回libvlc_instance_t*指针,失败返回nullptr。注意事项:可通过参…

2025蓝桥杯省赛C++B组解题思路

由于题面还没出来&#xff0c;现在先口胡一下思路 填空题直接打表找规律或者乱搞一下就能出&#xff0c;从大题开始说。 1&#xff0c;题意&#xff1a; 给你一个数组&#xff0c;这个数组里有几个数可以被一个连续递增的数字区间求和得出 思路&#xff1a;诈骗题&#xff0c;显…