性能知识点总结

一、性能测试基础【上】

1、性能测试的四大应用领域
能力验证:通过测试,向交付方证明系统所具备的能力;
瓶颈分析:验证能力过程中,发现系统的性能问题,对问题进行分析和定位
性能调优:对发现的问题进行优化,达到所具备的能力
容量规划:对以后可能出现的业务量剧增的场景进行测试,提前规划


2、怎么调研性能测试需求
熟悉项目的业务流程、明确硬件配置信息、线程的处理方式、用户并发数量、明确期望指标


3、常见的性能测试场景有哪些?
基准测试:压测出一个基准值,跟后期调优作对比
并发测试:模拟大量用户,同一时间发起请求
负载测试:不断地施加压力,找到性能的瓶颈点
稳定性测试:选择瓶颈点上压力的80%做稳定性压测,持续运行一段时间,查看系统是否内存溢出


4、性能测试准入需要检查哪些内容?
配置检查:服务器、中间件、数据库等配置信息
资源检查:资源是否满足性能测试
版本检查:正式环境和测试环境服务器、中间件、数据库等版本是否一致

二、性能测试基础【下】

1、常见的应用层性能指标有哪些?
VU:并发用户数
RPS:每秒请求数
TPS:throughput:每秒完成响应的请求数
HPS:hit persecond 浏览器层面的每秒请求数
QPS:query persecond 每秒将请求发送到服务器的查询次数
RT:response time 响应时间
error:错误率


2、TPS和RPS有什么关联?
RPS是性能的入口,tps是性能的出口,rps是请求的能力指标,tps是处理请求能力的指标。
通过不断的调整RPS来测试最大的TPS;在瓶颈之前,RPS增加,TPS也会增加;瓶颈之后,RPS增加,TPS不变甚至下降

3、常见的性能测试类型有哪些?
基准测试、并发测试、负载测试、压力测试

4、怎么判断TPS拐点?
当RPS持续增大时,TPS不变甚至下降,响应时间变长,即tps拐点

三、环境部署【上】

1、ubuntu安装速度很慢怎么办?

修改为国内镜像源
2、ubuntu修改静态ip
第一步、先获取网卡名称,输入ifconfig
第二步:修改网卡配置文件sudo vim
/etc/network/interfaces
第三步:修改DNS配置
第四部:重启网络服务
3、如果需要用xshell连接服务器,需要装什么?

需要提前安装ssh,并放开端口为22的防火墙
4、ubuntu怎么配置jdk环境变量?
第一步:vim/etc/profile
第二步:export JAVA_HOME=/home/zhufc/jdk1.8.0_241export
CLASSPATH=..${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
第三步:source/etc/profile
5、tomcat的线程池在哪个目录配置?

在tomcat安装目录下的conf目录下的server.xml文件目录配置
6、tomcat的jvm在哪个目录配置?

在tomcat 的bin 下catalina.sh目录配置

四、环境部署【下】

1、简述一下docker的三层概念
 1)镜像 image:
 是一个环境的运行模板,镜像可以实例化运行系统
 2)容器 Container:
镜像的实例化体现,每一个容器都是一个极简的linux系统,每一个容器都是对外隔离的,但是保留一个交互的窗口(映射端口),
外部服务通过映射端口访问容器,只要内存足够,一个镜像理论上可以实例化n多容器,容器可以重新打包成新的镜像
 3)仓库 Repository:
存放镜像的空间,可以下载镜像到本地,可以上传镜像到远程仓库

ps:仓库-镜像-容器
仓库下载镜像-镜像生成容器-容器打包成镜像-镜像上传到仓库
容器就是隔离的linux系统
镜像可以生成无数个容器
容器之间相互隔离,用端口互相联系
2、ubuntu怎么安装docker?
apt-get install docker.io

3、docker怎么拉取镜像文件?
docker pull ${镜像地址}

4、镜像文件怎么实例化一个容器?
docker run -d -p {映射端口}:{默认端口} 镜像名称:tag标签

例:docker run -d -p 4406:3306 registry.cn-hangzhou.aliyuncs.com/zhufc/mysql:v2

5、怎么进入容器进行应用部署?
1.docker ps 查看已经启动的容器
2.docker exec -it {CONTAINER ID} bash 进入容器

6、容器映射端口的作用是什么?
无需在公网暴露内部真实地址,从而隐蔽内部网络地址,降低安全风险。
可以通过转换防止一些特定端口被占用,便于记忆

7、docker日志怎么查看?
docker logs -f -t --tail 100 {容器名称}
-f : 跟踪日志输出
-t : 显示时间戳
--tail :仅列出最新N条容器日志


8、根据下面镜像部署一个tomcat应用容器
docker pull registry.cn-hangzhou.aliyuncs.com/zhufc/xiaoyaoji:web

 docker run -d -p 8081:8080 registry.cn-hangzhou.aliyuncs.com/zhufc/xiaoyaoji:web 映射端口号8081


docker pull registry.cn-hangzhou.aliyuncs.com/zhufc/mysql5:v1 

docker run -d -p 4406:3306 registry.cn-hangzhou.aliyuncs.com/zhufc/mysql5:v1 8081

tomcat与mysql关联:

1、进入tomcat

2、切换到/usr/local/tomcat/apache-tomcat-7.0.78/webapps/api/WEB-INF/classes

3、编辑config.properties文件---vim config.properties

4、修改jdbc.url

5、修改jdbc.username

6、修改jdbc.password

7、保存后重启tomcat ----docker restart ${CONTAINER ID}

五 、基础脚本设计

1:jmeter怎么保持长连接?
a)、Http请求 勾选 “Use KeepAlive”复选框
b)、还需要在Advanceed高级选项面板,选择HttpClient4类型的HttpRequest请求实现。
c)、配置JMeter.properties中的时间空闲等待时间,设置默认为0,默认情况下,不会对长连接进行空闲等待,一旦连接空闲,则立马断开了,这也是导致大家压测中出现了失败的一种情形。所以,需要进行空闲等待时间的修改,这个时间,建议尽量和后端服务器的空闲等待时间保持一致。

具体的修改办法是:在jmeter.property文件,找到 httpclient4.idletimeout 空闲等待时间选项,进行合适的修改即可。由于前面使用了60s,所以在这里修改为 60000ms,也就是60s。


2:jmeter的堆内存怎么配置?
通过 jmeter.bat 中 set HEAP=-Xms512m -Xmx512m 进行配置。其中Xms是最小堆内存,Xmx是最大堆内存;可以最小和最大设置为相同数值,避免频繁出现内存切换


3:Windows的TCP内核怎么配置?
打开注册表 win+r regedit
目录计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
配置参数
TCPWindowSize【滑动窗口】
TcpTimedWaitDelay【tcp延迟时间】
MaxUserPort【tcp端口范围】
KeepAliveTime【长连接时间】
TcpMaxDataRetransmissions【重传次数】
4:ramp up的作用是什么?
【1】决定多长时间启动所有线程。如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。 一般设置ramp-up=线程数启动,并上下调整到所需的。

【2】用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。

【3】Ramp-Up Period(in-seconds)代表隔多长时间执行,0代表同时并发


5:delay的作用是什么?
延迟创建线程,直到该线程开始采样,即之后的任何线程组延迟和加速时间为线程本身。这样可以支持更多的线程,但不会有太多是同时处于活动状态。

延迟分配线程资源,待线程启动才分配内存空间,防止一下子启动太多线程而卡死

6:jmeter怎么配置连接超时?
HTTP 请求页面—Advanced — “ Timeouts(milliseconds) Connect”:设置链接超时时间Response(服务端响应时间)
TCP取样器 — “ Timeouts(milliseconds) Connect”:设置链接超时时间

六、基准性能测试

1,为什么要做基准测试?
为性能测试建立一个基线标准,为后续的调优做对比。常用的评估指标有响应时间,TPS,CPU利用率等。
2,压力模型有哪几种?
  1)用户模型,最大支撑每秒多少用户同时施压,

   2)RPS模型,最大支撑每秒多少次查询
3,性能测试结果怎么对比?

对比预期的响应时间、TPS

4,jmeter 怎么监听服务器性能数据?
网络TCP可以通过wireshark 监 听
中间件和数据库通过spotlight
CPU,内存IO通过spotligth ,agent
jvm 施压机的jvm ,负载机的jvm服务器配置

5、描述一下数据包在系统架构中的流向

1.发起请求--》TCP连接--》nginx分发--》tomcat--》缓存服务器--》数据库

七、混合性能场景

一、什么是负载测试?
使用阶梯增压,不断向后端增加服务器的压力,一直到tps出现瓶颈

二、从两个维度设计jmeter负载场景
1.系统最大支撑多少用户同时处理
2.根据系统的吞吐量和业务比例来设计

三、stepping和currency线程组的核心区别在哪里?
stepping线程组是瞬间全部分配好线程所需要的资源
currency线程组是逐步分配好线程所需要的资源

四、TPS的衰减点如何判断?
负载持续升高的情况下,单线程的tps 保持稳定或者下降

五、混合业务场景下的TPS含义是什么?
是多个业务线同步处理(多接口的压测,不需要加集合点),其实这个叫并行,此时TPS叫做每秒完成的事物数;

六、假设需要在5分钟内完成30000笔业务,单笔业务时间是10s,那么平均有多少笔业务同步处理才能达标?
计算公式:平均并发=(业务总量*单笔时间)/总时间
(30000*10)/(5*60)=1000,需要1000笔业务同步处理

八、消息队列性能测试

一、MQ指的是什么?
1.MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息

二、描述一下消息发布的几个组件
1.生产者(发布消息)
2.消息协议(TCP/AMQP/MQTT)
3.消息中间件(存储消息)

4.消费者

5.发布者基于消息协议发布消息,存储到消息中间件里,消费着去订阅消息

三、简述消息发布的几种模式
1.dynamicTopics/topic(主题模式)
2.dynamicQueues/topic1(点对点模式)

四、什么是消息持久化?做持久化有什么性能影响?
1.持久化的主要机制就是将信息写入磁盘,当MQ服务宕机重启后,从磁盘中读取存入的持久化信息,恢复数据 。
2.做持久化对性能有锁争用的影响

五、消息发布性能测试有哪些测试场景?

1.业务解耦
2.异步消息
3.流量削峰

九、分布式压测

一、分布式压测的工作原理是什么?
jmeter分布式压测时,选择其中一台作为控制机,其余的机器做为负载机
执行时,控制机会把脚本发送到每个负载机上,负载机获取到脚本就执行脚本(负载机只需要启动jmeter-server.bat或者jmeter-server)。
执行后,负载机回传执行结果给控制机,控制机会进行汇总

二、分布式压测有哪些注意事项?
1.主机和从机的jmeter版本一致
2.主机和从机的jar包要一致
3.主机和从机的jdk版本一致
4.主机和从机的参数文件要一致
5.主从机参数路径格式一致
6.主从机的活动线程要区分开
7.多台分布式机器时间要同步
8.分布式结果
9.防火墙要关闭

三、分布式压测的数据回写方式有哪些?对性能有什么影响?
1.Stripped
将成功的采样信息从响应数据中删除
2.Standard
采样信息全部回传给主机
3.Batch
采样信息超过指定的阈值后再同步回传给主机
总量阈值(num_sample_threshold)默认 100
时间阈值(time_threshold)默认 60000s
4.Asynch
响应信息在本地队列临时存储。用独立的线程发送采样信息
队列太长也会导致测试线程阻塞
asynch.batch.queue.size 设置队列
5.DiskStore
测试结束前将响应信息存储在磁盘(在进程关闭后删除)
6.Hold
测试结束前将采样信息保存在内存
7.Statistical
采样信息超过指定阈值后只发送摘要信息
8.StrippedBatch
删除采样信息后,使用 Batch 模式
9.StrippedDiskStore
删除响应信息之后使用 DiskStore 的方式处理
10.StrippedAsynch
删除采样信息后,使用 Asynch 模式

十、性能分析步骤

一、简单描述一下数据包在项目架构中的流向
客户端发出数据包--TCP三次握手--Nginx转发--tomcat--mysql数据库

二、项目的应用类型有哪两种?描述一下差异
1、cpu密集型
2、IO密集型
CPU 密集型也可以称之为算法密集型,系统大多数时候是 CPU 负载和利用率占比很高,磁盘 I/O 处理的很快;IO 密集型指的是系统大部分的时候在做 I/O (硬盘和内存的读/写),此时
CPU 利用率和负载都不高;
Cpu 密集型和 IO 密集型是互斥的。

三、你的性能问题排查思路是什么?
压力机资源够不够?
响应时间消耗在连接层还是服务层?
TCP 连接是多少,有没有重传和丢包,队列有没有溢出,缓冲区有没有溢出
Tomcat 连接池有多大?连接有没有泄露?
Nginx 日志有没有异常?
Cpu 的利用率高不高,user 高还是 sys 高?切换和中断高不高?
内存有没有泄露?swap 开始交换了吗?
IO 队列长不长?IOwait 有多少?IO 尺寸是多大?
带宽利用率是多少?网络吞吐量是多大?
占用 cpu 最高的线程是哪个?有没有阻塞和死锁?
Jvm 内存分配合理吗?fullgc 是否频繁?
数据库的缓存命中率是多少?连接是多少?有索引吗?

十一、中间件性能分析

一、简述Tomcat的工作原理
TCP 在三次握手成功之后,客户端和服务端都是 Established 状态,此时服务端
维持了一个 accept 全连接队列。
Tomcat 的 acceptor 线程负责从 accept 队列中将连接取出,然后交给 worker 线程
处理(读取参数,处理逻辑,返回响应)。之后 Tomcat 判断该连接是否为 keep alived
长连接,如果不是长连接则关闭立刻关闭然后释放 worker 线程;如果是 keep alived
长连接则继续维持连接,等待下一个数据包直到 keep alived 超时再释放 worker 线程。
当 TCP 连接数超出 Tomcat 的 maxConnections,连接会由 acceptor 队列自持。如
果 acceptor 队列也满了,accept 线程就会持续处于阻塞状态,直到 TCP 连接数低于
maxConnections 时再继续工作。在 accept 线程阻塞的过程中,连接事实上是完全中
断的。如果阻塞的时间超出了 Tomcat 的 connectionTimeout,就会返回连接超时

二、简述tomcat中最大连接数和acceptcount的联系
TCP 连接超出 maxConnection 之后进入 accept。如果 accept 满了,线程会持续阻塞,直到 TCP 连接数低于maxConnections 时再继续工作。在 accept 线程阻塞的过程中,连接事实上是完全中断的

三、tomcat,nginx,mysql,nginx的性能分析有什么共通性?
这些中间件都有最大连接数和backlog(缓冲池),如果连接阻塞了,出现大范围的连接超时,先去检查全连接队列,再去检查最大连接数,最后检查backlog

四、如果返回connection timeout,需要从哪些方向去分析问题?
1、客户端设置的超时时间
2、TCP第二次握手失败
3、TCP 连接超出tomcat的 maxConnection

十二、Nginx性能分析

一、Nginx有哪几种负载均衡策略
Nginx 负载均衡通过 upstream 模块来实现
1.轮循
在这种策略下,Nginx 会按照时间顺序将请求转发到不同的服务器上,如果某一台机器 down 掉了,会自动从负载策略中剔除,下次不再轮询
2.权重
Nginx 会根据 weight 权重值来转发请求到服务器。权重越高的,转发越多。
3.iphash
在这种策略下,Nginx 会根据用户第一次请求时的 ip 计算出一个 hash 值。然后将请求分配到某一台服务器上,后续该用户所有的请求都会根据 hash 算法分发到最初处理的这台服务器。也就是说每个用户的请求都会被固定到某一
台机器去处理。iphash 可以和 weight 同用
4.最少连接
在这种策略下,Nginx 会计算每台服务器的连接,然后将请求转发给连接数最少的那台机器

二、worker_rlimit_nofile受限于linux的哪个参数?
worker_rlimit_nofile 受限于 linux 的 open files 和 file_max。

三、tcp_nopush和tcp_nodelay有什么区别?
tcp_nopush on:开启此参数,数据包会在积累到一定数量再发送出去
tcp_nodelay on:开启此参数,所有的包都立即发送。
nopush 和_nodelay互斥

四、什么是nginx惊群现象?对性能有什么影响?怎么规避?
所有的 Worker 都会被唤醒,仍然只有一个Worker 能获取新连接,其它的 Worker 会重新进入休眠状态这就 是“惊群”
上下文切换增多或者负载上升
accept_mutex on设置网络连接序列化,防止惊群现象发生,多个 Worker 将以串行方式来处理,但是只有一个 Worker 会被唤醒,其他的 Worker 继续保持休眠 状态;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值