性能测试
文章平均质量分 58
性能测试知识分享
简单随风
这个作者很懒,什么都没留下…
展开
-
Spark程序性能优化
性能优化分析一个计算任务的执行主要依赖于CPU、内存、带宽Spark是一个基于内存的计算引擎,所以对它来说,影响最大的可能就是内存,一般我们的任务遇到了性能瓶颈大概率都是内存的问题,当然了CPU和带宽也可能会影响程序的性能,这个情况也不是没有的,只是比较少。Spark性能优化,其实主要就是在于对内存的使用进行调优。通常情况下,如果你的Spark程序计算的数据量比较小,并且你的内存足够使用,那么只要网络不至于卡死,一般是不会有大的性能问题的。但是Spark程序的性能问题往往出现在针对大数据量进行计算(比原创 2021-09-07 21:04:09 · 1138 阅读 · 1 评论 -
Kafka集群参数调忧
主要分为3个模块:JVM参数调优Replication参数调优Log参数调优JVM参数调优默认启动的Broker进程只会使用1G内存,在实际使用中会导致进程频繁GC,影响Kafka集群的性能和稳定性通过jstat -gcutil <pid> 1000查看到kafka进程GC情况主要看YHC,YGT,FGC,FGCT这几个参数,如果这几个值不是很大,就没什么问题YGC: young gc发生的次数YGCT: young gc消耗的时间FGC: full gc发生的次数F原创 2021-08-24 08:58:51 · 540 阅读 · 1 评论 -
JS对象优化
首先我们要先弄清楚对象可以做哪些优化:以相同顺序初始化对象成员,避免隐藏类的调整实例化后避免添加新属性尽量使用Array代替array-like对象避免读取超过数组的长度(越界)避免元素类型的转换下面以具体的代码为例来进行讲解:Tips: HC代表hide class案例1:class RectArea { // HC0 constructor(l, w) { this.l = l; // HC1 this.w = w; // HC2原创 2021-07-08 20:52:15 · 368 阅读 · 0 评论 -
V8优化代码案例
这里贴一下V8引擎的结构,在拿到JS代码后会讲重要的信息提取出来,存储在一些数据结构里,通过解释器和编译优化得到最终机器执行的代码。但是在经过编译优化后的代码,有些时候会出现优化的代码不合适,这个时候会出现逆优化的情况,此时反而会降低运行效率。所以我们编写代码时,应该尽量按V8的优化去编写代码,尽量减少出现逆优化的情况。下面举个代码的例子:const {performance, PerformanceObserver} = require('perf_hooks');const add = (a, .原创 2021-07-06 09:09:37 · 252 阅读 · 0 评论 -
HTML优化思路
减小iframes使用压缩空白符避免节点深层级嵌套避免table布局删除注释CSS&Javascript尽量外链删除元素默认属性原创 2021-07-08 21:02:03 · 132 阅读 · 0 评论 -
JS缩短解析时间的思路
解决方案Code splitting 代码拆分,按需加载Tree Shaking 代码减重减少主线程工作量避免长任务避免超过1kb的行间脚本使用rAF和rIC进行时间调度Progressive Bootstrapping 渐进式启动可见不可交互 vs 最小可交互资源集...原创 2021-07-06 08:52:28 · 161 阅读 · 0 评论 -
常用性能测量APIs
我们可以将一些性能统计的测量指标,计算后发给服务端用于分析。这里以Time to Interacrtive(可交互时间)为例:methods: { gettTime () { // Time to Interacrtive 可交互时间 let timing = performance.getEntriesByType('navigation')[0] let tti = timing.domInteractive - timing.fetchStart console.原创 2021-07-01 09:23:58 · 345 阅读 · 2 评论 -
使用LightHouse分析性能
我们可以通过npm进行安装npm install -g lighthouse使用非常简单,直接命令行 lighthouse + 测试网址就可以,在这里我们以bilibilli主页为例lighthouse http://www.bilibili.com它会自动开启一个chrome窗口进行测试,等待片刻看到这两句时,代表测试已经结束了,我们将结果中的html文件地址拷贝至浏览器打开中间这一部分是工具提供的优化建议,例如:避免多个页面的重定向、去除未使用的js代码、对大图进行预加载等,并在右方原创 2021-06-30 08:55:17 · 678 阅读 · 0 评论 -
使用WebPageTest评估Web网站性能
在线版本登录https://webpagetest.org,输入需要测试的网站,然后还可以选对应的请求地址和浏览器我们还可以点击Advanced Settings,选择更多高级选项在这里举几个例子:Connection:模拟用户网络的情况Desktop Browser Dimensions:浏览器分辨率Number of Tests to Run:测试次数RepeatView:这两条的区别主要是看浏览器的缓存是否有效First View and Repeat View:会有重复访问原创 2021-06-29 22:46:51 · 796 阅读 · 2 评论 -
RAIL测量模型
R:Response 响应 处理事件应在50ms以内完成A:Animation 动画 每10ms产生一帧1s/60帧 ≈ 16ms/帧 - 6ms动画绘制时间 = 10ms/帧I:Idle 空闲 尽可能增加空闲时间L:Load 加载 在5s内完成内容加载并可以交互...原创 2021-06-29 21:34:28 · 147 阅读 · 0 评论 -
Chrome浏览器查看当前帧数
打开F12调试工具输入command + shift + p输入frame, 找到show frames per second FPS meter,然后回车浏览器左上角就会出现帧数的显示原创 2021-06-29 20:58:53 · 13740 阅读 · 2 评论 -
万字长文超详细讲解垃圾回收(图文+代码)
开篇什么场景下该使用垃圾回收策略在对内存要求苛刻的场景:想办法提高对象的回收效率,多回收掉一些对象,腾出更多内存在CPU使用率高的情况下:降低高并发时垃圾回收的频率,让CPU更多的去执行业务而不是垃圾回收垃圾回收发生在哪个区域我们可以再看一下JVM内存结构(详情可查看《图解JVM内存结构》)堆 和 方法区 是线程共享的,这两块才需要关注垃圾回收堆:是发生垃圾回收的主要区域,主要回收我们创建的对象方法区: 回收废弃的常量以及不需要使用的类对象在什么时候能够被回收有两种方法判断对象原创 2021-01-22 19:31:44 · 676 阅读 · 0 评论 -
JVM调优:方法内联
方法内联定义把目标方法的代码复制到发起调用的方法之中,避免发生真实的方法调用简单demoprivate static int add1(int x1, int x2, int x3, int x4) { return add2(x1, x2) + add2(x3, x4);}private static int add2(int x1, int x2) { return x1 + x2;}JVM进行内联后会变成以下代码去运行private static int addIn原创 2021-01-15 08:56:15 · 450 阅读 · 0 评论 -
Tomcat调优教程
TIPS本文基于Tomcat 9.0编写,理论兼容Tomcat 8.x及更高版本。Tomcat调优参数主要调优参数在做Tomcat的调优时,最重要是就是Connector(连接器)的调优了(少数情况下,也可能会配置Executor)下面贴出一段server.xml中的配置:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/>.原创 2021-01-07 17:31:25 · 587 阅读 · 0 评论 -
Linux调优相关命令
TIPS本文基于CentOS 7编写,理论支持所有所有版本Linux发行版,部分命令的个别参数在不同版本中可能存在细微的差异。入门级# 切换目录cd# 示例# 切换到上一层目录cd ..# 切换到/opt/softwarecd /opt/software# 显示工作目录pwd# 显示指定工作目录下之内容ls# 示例# 列出当前目录中文件及目录的详情ls -l# 列出当前目录及其子目录中文件及目录的详情ls -lR# 创建目录mkdir# 示例# 创.原创 2021-01-04 15:03:42 · 466 阅读 · 0 评论 -
Turbine聚合服务 + Hystrix-Dashboard集成大盘监控
Turbine聚合服务Turbine的聚合比较简单,只需要添加注解和填好配置文件即可pom文件<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <原创 2020-12-31 17:11:42 · 279 阅读 · 0 评论 -
线程池调优:使用工具自动计算合适的corePoolSize与LinkedBlockingQueue
在这里推荐一个能自动计算的工具类 https://www.javacodegeeks.com/2012/03/threading-stories-about-robust-thread.html它提供了两个函数,PoolSizeCalculator与MyPoolSizeCalculatorPoolSizeCalculator/** * A class that calculates the optimal thread pool boundaries. It takes the desired ta原创 2020-12-28 09:11:19 · 523 阅读 · 0 评论 -
图解JVM内存结构
JVM内存结构大致如下:其中白色块部分是线程共享,粉色块是线程隔离的堆堆是JVM中最大的一块内存空间,绝大部分对象都存在堆内存内,然后堆又可以做以下细分:虚拟机栈虚拟机栈由栈帧组成,每一次方法调用都会创建一个栈帧,然后去压栈。当方法返回时,则对应着出栈操作。栈帧中由包含局部变量表、操作数栈、指向运行时常量池的引用、方法返回地址、动态链接。方法里的变量在执行时,会从局部变量表或对象实例的字段里复制变量或常量,放入操作数栈,计算时则从操作数栈里放入或取走数据。本地方法栈本地方法栈和虚拟机原创 2020-10-30 10:19:43 · 306 阅读 · 0 评论 -
Percona Toolkit部分常用工具的使用
pt-query-digestTIPS官方文档:pt-query-digest作用分析日志(包括binlog、General log、slowlog)、processlist以及tcpdump中的查询语法pt-query-digest [OPTIONS] [FILES] [DSN]常用OPTIONS--create-review-table 当使用--review参数把分析结果输出到表中时,如果没有表就自动创建--create-history-table 当使用--原创 2020-10-22 16:22:57 · 514 阅读 · 0 评论 -
Percona Toolkit安装
TIPS本文基于Percona Toolkit 3.2.0,理论支持所有版本。Percona Toolkit是一款MySQL世界里面非常实用的工具套件,本文来探讨如何安装它。工具列表pt-align :对齐其他工具的输出pt-archiver :将数据归档到其他表或文件pt-config-diff :比较配置文件和变量pt-deadlock-logger :记录MySQL死锁pt-diskstats :交互式IO监控工具pt-duplicate-key-checker :找到重复的索.原创 2020-10-22 15:13:56 · 1741 阅读 · 0 评论 -
MySQL:COUNT语句的索引使用
我们先准备好测试数据create table user_test_count( id int primary key not null auto_increment, name varchar(45), age int, email varchar(60), birthday date) engine 'innodb';insert into user_test_count (id, name, age, email, b原创 2020-10-22 09:08:00 · 2868 阅读 · 0 评论 -
MySQL:LIMIT语句优化思路
例如我们有一个很简单的查询第3W页数据的sqlselect *from employeeslimit 300000,10;有以下优化方案,首先我们给emp_no字段设置索引方案1:覆盖索引select emp_nofrom employeeslimit 300000,10;如果我们一定要查询所有字段呢方案2:覆盖索引+joinselect *from employees e inner join (select emp_no from employees li原创 2020-10-21 16:33:52 · 267 阅读 · 0 评论 -
MySQL:场景索引失效场景与解决方案
可能导致索引失效的场景:索引列不独立。独立是指:列不能是表达式的一部分,也不能是函数的参数使用了左模糊使用OR查询的部分字段没有索引字符串条件未使用’'引起来不符合最左前缀原则的查询索引字段建议添加NOT NULL约束隐式转换导致索引失效示例1:索引字段不独立(索引字段进行了表达式计算)explainselect *from employeeswhere emp_no + 1 = 10003;解决方案:事先计算好表达式的值,再传过来,避免在SQLwhere条件 = 的左侧做计原创 2020-10-14 09:15:14 · 522 阅读 · 1 评论 -
MySQL:数据库诊断命令
TIPS本文基于MySQL 8.0,理论支持MySQL 5.0及更高版本。本文整理了常用的MySQL诊断命令,可以帮助我们了解数据库的运行情况。SHOW PROCESSLIST作用:SHOW [FULL] PROCESSLIST用于查看当前正在运行的线程。如果执行此命令的用户拥有 PROCESS 权限,则可看到所有线程;否则只能看到自己的线程(即与当前登录用户关联的线程)。如果不使用FULL关键字,只在Info字段中展示前100个字符。当遇到“too many connections”错误信.原创 2020-10-13 16:51:33 · 536 阅读 · 1 评论 -
MySQL:SQL性能分析
TIPS本文基于MySQL 8.0本文探讨如何深入SQL内部,去分析其性能,包括了三种方式:SHOW PROFILEINFORMATION_SCHEMA.PROFILINGPERFORMANCE_SCHEMASHOW PROFILESHOW PROFILE是MySQL的一个性能分析命令,可以跟踪SQL各种资源消耗。使用格式如下:SHOW PROFILE [type [, type] ... ] [FOR QUERY n] [LIMIT row_count [OFF.原创 2020-09-30 15:28:44 · 312 阅读 · 0 评论 -
MySQL:一文搞懂EXPLAIN命令
TIPS本文基于MySQL 8.0编写,理论支持MySQL 5.0及更高版本。EXPLAIN使用explain可用来分析SQL的执行计划。格式如下:{EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild]{EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FOR CONNECTION connection_id}{EXPLAIN | DES.原创 2020-08-18 09:22:33 · 624 阅读 · 0 评论 -
MySQL:快速上手慢查询日志
TIPS本文基于MySQL 8.0,理论支持MySQL 5.0及更高版本。相关参数与默认值参数作用默认值log_output日志输出到哪儿,默认FILE,表示文件;设置成TABLE,则将日志记录到mysql.slow_log中。也可设置多种格式,比如 FILE,TABLEFILElong_query_time执行时间超过这么久才记录到慢查询日志,单位秒,可使用小数表示小于秒的时间10log_queries_not_using_indexes是否要将未使用.原创 2020-08-14 09:46:31 · 170 阅读 · 0 评论 -
Spring Boot Actuator监控数据可视化
TIPS本文基于Spring Boot 2.1.5,理论支持Spring Boot 2.x所有版本众所周知,Spring Boot有个子项目Spring Boot Actuator,它为应用提供了强大的监控能力。从Spring Boot 2.0开始,Actuator将底层改为Micrometer,提供了更强、更灵活的监控能力。Micrometer是一个监控门面,可以类比成监控界的 Slf4j 。借助Micrometer,应用能够对接各种监控系统,例如:AppOptics、Atlas、Datado.原创 2020-07-06 15:54:34 · 2020 阅读 · 0 评论 -
Skywalking:接入告警
TIPS本文基于Skywalking 6.6编写,理论支持Skywalking 6.0及更高版本。Skywalking的告警由规则来定义。规则存放在 skywalking根目录/config/alarm-settings.yml 中。该文件结构大致如下:rules: endpoint_percent_rule: metrics-name: endpoint_percent include-names: - dubbox-provider exclude-n.原创 2020-07-06 09:33:16 · 3316 阅读 · 0 评论 -
手把手教你编写Skywalking插件
前置知识在正式进入编写环节之前,建议先花一点时间了解下javaagent(这是JDK 5引入的一个玩意儿,最好了解下其工作原理);另外,Skywalking用到了byte-buddy(一个动态操作二进制码的库),所以最好也熟悉下。当然不了解关系也不大,一般不影响你玩转Skywalking。javaagentbyte-buddy 1.9.6 简述及原理1术语Span:可理解为一次方法调用,一个程序块的调用,或一次RPC/数据库访问。只要是一个具有完整时间周期的程序访问,都可以被认为是一个spa转载 2020-07-06 09:22:18 · 2404 阅读 · 0 评论 -
Skywalking:代码行级监控 apm-customize-enhance-plugin插件使用教程
apm-customize-enhance-plugin插件作用:自定义增强任意类里的任意方法,从而实现对任意类里任意方法的监控。举个例子,有一个类,定义如下:public class TestService1 { public static void staticMethod(String str0, int count, Map m, List l, Object[] os) { // 业务逻辑 } ...}那么,想要对该方法进行监控,则可如下操作:移动jar原创 2020-07-06 09:08:55 · 3448 阅读 · 1 评论 -
Skywalking:Java Agent配置
Java Agent支持的配置属性TIPS本表格基于Skywalking 6.6.0,官方文档详见:https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/README.md ,其他版本配置项不完全相同,请自行将链接中的 v6.6.0 修改成你所使用的版本。属性名描述默认值agent.namespace命名空间,用于隔离跨进程传播的header。如果进行了原创 2020-07-04 11:15:23 · 17394 阅读 · 0 评论 -
Skywalking急速安装
TIPS本文基于Skywalking 6.6.0编写,理论支持Skywalking所有版本。原创 2020-07-03 18:30:30 · 2368 阅读 · 0 评论 -
监控体系搭建(开箱即用):node_expoter + promethous + grafana
node_expoter 用于采集服务器数据promethous 用于采集数据的存储、计算和提供server服务grafana 用于数据的渲染最终效果如下:node_expoter命令行安装或官方下载wget -c https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz解压tar zxvf prometheus-2.15.1.原创 2020-06-30 17:46:11 · 906 阅读 · 0 评论 -
性能测试体系的知识分享
开始性能测试前需要了解的内容:1、项目具体需求。2、指标:响应时间在多少以内,并发数多少,tps多少,总tps多少,稳定性交易总量多少,事务成功率,交易波动范围,稳定运行时长,资源利用率,测哪些交易,哪些接口,测试哪些场景。3、环境:生产环境服务器数量,测试环境服务器数量,按照资源配比得出测试指标。4、协议:系统用什么协议进行通讯。5、压力机数量:如果并发用户数太多,需要把压力发到不同的压力机,不然可能会存在压力机瓶颈问题,导致tps和响应时间抖动。6、交易占比:分析线上日志得出tps占比。7转载 2020-05-12 17:28:18 · 543 阅读 · 0 评论 -
Locust 编写简单性能测试脚本
我们以访问百度首页来进行举例:首先创建一个test.py的文件from locust import HttpLocust, TaskSet, task# 定义用户行为class MyTaskSet(TaskSet): @task def baidu_index(self): self.client.get("/")class WebsiteUser...原创 2019-07-06 17:23:55 · 2779 阅读 · 0 评论 -
性能测试指标定义
1.事务从客户端发起的一个或多个请求(这些请求组成一个完成的操作),到客户端接受到从服务器返回的相应2.TPS每秒钟系统能够处理的事务数3.请求相应时间从客户端发起的一个请求开始,到客户端接受到从服务器返回的响应。整个过程所耗费的时间。4.事务响应时间事务可能是由一个或多个请求组成的,事务响应时间主要是针对于用户的角度而言。5.并发没有严格意义上...原创 2018-06-26 21:39:29 · 1827 阅读 · 0 评论 -
Jmeter的BeanShell中报错:org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval
完整报错信息如下:Response message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval In file: inline evaluation of: ``import java.util.HashMap; HashMap<String,String> map = new ...原创 2019-09-04 14:55:43 · 19192 阅读 · 1 评论 -
jmeter分布式报错java.rmi.ConnectException: Connection refused to host:xxx的解决办法
1,原因分析:Jmeter采用了rmi进行远程调用,在开启RMI服务时,如果服务端有多个网卡,它只是使用其中任意一个网卡,默认情况下,导致jmeter的controller机器和agent机器不在同一个网段内,无法互通,导致失败2,解决方法:我们要在多网卡的服务器上开启RMI服务的话必须指定IP,使他们能够在同一个网段内。需要以下几步(假定所有机器都在10.120.11.*网段,a...转载 2018-07-16 15:21:53 · 25799 阅读 · 0 评论 -
Jenkins+Ant+Jmeter的持续集成(二:Jenkins持续集成)
本篇文章接在Jenkins+Ant+Jmeter的持续集成(一:Ant执行Jmeter脚本)之后1.Jenkins全局工具配置系统管理->全局工具配置(1)JDK配置 (2)Ant配置 2.Jenkins新建任务(1)构建一个自由风格的项目 (2)配置构建->Invoke Ant Ant Version内选择步骤1-2中配置的Ant版本 B...原创 2018-05-31 11:40:51 · 1774 阅读 · 0 评论