一、应用项目如何部署在服务器上
可以将项目进行打jar包
双击install,控制台就会打印打包的过程
最终打的包,会存放在打印的那个路径下
这个jar包,就是开发人员开发好,直接可以部署的
可以通过命令,在终端直接启动这个jar包
java -jar jxd-repay-common-1.0.0.jar
所有java程序,最终都会变成一个jar文件
linux因为无图形界面,可以最大化的执行 。
二、服务器资源占用
服务器本身资源是有限的几核几G
服务器的四大资源:CPU、内存、磁盘、网络带宽
系统为什么会有瓶颈?
每一个客户端访问服务器,都会占服务器的资源,服务器上运行的程序,也会占用资源。只要不断的占用资源,就一定会出现瓶颈
在面向对象的语言中,实例化一个对象,会创建一个副本。
线程把副本搬运到CPU上去执行,CPU给一个任务去执行。
线程会先分配内存,线程越多,占内存越多
电脑是如何死机的
资源不够用,后续的线程都在排队等着分配资源,排队就像堵车,全部堵死,系统崩溃
做性能测试,最重要的就是,程序和服务器都能健康
进程和线程的关系:整体与局部独立功能模块的关系
1、进程是一个浏览器的标签页。而线程则是标签页中的一个独立的功能,比如页面渲染,这是一个线程,比如文件下载,这也是一个线程,比如文本输入,这也是一个线程。
2、 进程是一个视频播放器,而线程则是处理网络请求。 处理视频解码,这是一个线程。处理音频解码,这是一个线程。
三、性能瓶颈的判断
三.一、性能指标和反馈的含义
1、虚拟机就是独立的电脑系统。使用我们的电脑登录虚拟机,只是用我们的电脑,访问虚拟机电脑而已,这是两台电脑
1、虚拟机是在电脑主机上划分出一个“小房间”,在这个“小房间”里可以独立地运行Linux操作系统,拥有自己的虚拟硬件资源(如虚拟CPU、虚拟内存、虚拟硬盘等)。
Linux虚拟机是一个很好的工具。可以在虚拟机中安装不同版本的Linux发行版(如Ubuntu、CentOS等),进行各种操作系统的配置、编程开发等操作,而不用担心对物理主机造成影响。比如一个程序员可以在Linux虚拟机上搭建一个Web开发环境,安装Apache、MySQL等软件进行Web应用程序的开发
2、Xshell是一款功能强大的SSH(Secure Shell)客户端工具,主要用于远程登录和管理Linux服务器。Xshell会通过SSH协议建立一个加密的连接通道。用户在Xshell客户端中输入的命令会通过这个加密通道发送到Linux服务器,服务器执行命令后,将结果再通过加密通道返回给Xshell客户端显示出来。
它并不像虚拟机那样模拟一个完整的计算机环境,而是仅仅作为一个通信工具,让用户能够方便地访问和操作远程的Linux服务器。
1、响应时间(处理速度)
一个请求操作完成的时间,含【等待时间和处理时间】。
比如页面上资源的加载就
响应时间是指从客户端发送请求到接收到服务器响应的总时间,通常以毫秒(ms)为单位。
1、含义
响应时间反映了系统的处理速度,即系统从接收到请求到返回结果所需的时间。
响应时间越短,用户体验越好,系统的性能通常被认为越好。
2、分类
TTFB(Time To First Byte):从发送请求到接收到第一个字节的时间,反映了服务器处理请求并开始返回数据的时间。
总响应时间:从发送请求到接收完整响应的时间,包括服务器处理时间和网络传输时间。
3、示例
假设客户端在10:00:00发送请求,服务器在10:00:01开始返回数据,10:00:02返回完整数据,则:
TTFB = 1秒
总响应时间 = 2秒
2、并发量(负载能力)
并发量是指在某一时刻,系统同时处理的请求或任务的数量。
1、含义
并发量反映了系统的负载能力,即系统在某一时刻能够同时处理多少请求。
并发量越高,系统的负载越大,对资源的需求也越高。
2、分类
绝对并发量:某一瞬间实际同时运行的任务数。
相对并发量:一段时间内的平均并发数,通常通过吞吐量和响应时间计算。
3、示例
如果100个用户同时点击一个按钮,绝对并发量为100。
如果在60秒内,系统处理了300个请求,平均响应时间为2秒,则相对并发量为:
相对并发量 = 吞吐量 × 平均响应时间 = (300 / 60) × 2 = 10
1. 绝对并发(Absolute Concurrency)
绝对并发是指在某一时刻,同时运行的线程或任务的数量。
它是一个具体的、实际的并发数量,表示系统在某一瞬间真正同时处理的请求或任务数。
1)特点:
精确性:绝对并发是一个具体的数字,表示在某一时刻系统中同时运行的任务数。
瞬时性:它反映了某一瞬间的并发状态,而不是整个测试期间的平均情况。
资源占用:绝对并发越高,对系统的资源(如CPU、内存、带宽等)占用越大。
2)应用场景:
在性能测试中,绝对并发可以用来模拟真实用户同时访问系统的场景。
例如,100个用户同时点击一个按钮,此时的绝对并发数为100。
在系统设计中,绝对并发是评估系统是否能够承受高并发压力的重要指标。
3)示例:
假设一个电商网站在“双11”零点时,有1000个用户同时下单,那么此时的绝对并发数为1000。
2. 相对并发(Relative Concurrency)
相对并发是指在一定时间范围内,系统处理的并发请求的平均数量。
它是一个统计意义上的并发指标,用来描述系统在一段时间内的并发负载水平,而不是某一瞬间的实际并发数。
1)特点:
平均性:相对并发是一个时间段内的平均并发数,而不是某一瞬间的实际并发数。
统计性:它通过统计一段时间内的请求总数和时间来计算,反映的是系统的整体负载水平。
平滑性:相对并发比绝对并发更平滑,因为它考虑了时间范围内的整体情况,而不是瞬时的峰值。
2)应用场景:
在性能测试中,相对并发可以用来评估系统在一定时间内的整体负载能力,而不是仅仅关注瞬时的峰值。
在系统设计中,相对并发可以帮助设计者评估系统的平均负载能力,从而优化资源分配。
3)计算公式:
相对并发数 = 总请求数量 / 总时间
或者用更直观的方式表示:
相对并发数 = 吞吐量(RPS) × 平均响应时间(秒)
4)示例:
假设在60秒内,系统处理了300个请求,平均响应时间为2秒,则相对并发数为:
相对并发数 = 300 / 60 = 5 请求/秒 × 2 秒 = 10
这表示在60秒内,系统的平均并发数为10
3、资源占用率(各类资源使用情况)
资源占用率是指系统在运行过程中,
各种资源(如CPU、内存、磁盘I/O、网络带宽等)的使用比例,通常以百分比表示。
1、含义
资源占用率反映了系统的资源使用情况,帮助评估系统是否达到了资源瓶颈。
如果资源占用率过高(如CPU或内存接近100%),可能会影响系统的性能和稳定性。
2、常见资源
1)CPU占用率:CPU的使用比例,反映系统的计算负载。
2)内存占用率:内存的使用比例,反映系统的存储负载。
3)磁盘I/O占用率:磁盘的读写负载,反映系统的存储性能。
4)网络带宽占用率:网络的传输负载,反映系统的网络性能。
3、示例
如果CPU占用率持续超过80%,可能表明系统计算能力不足。
如果内存占用率达到90%,可能表明系统需要更多的内存资源。
4、吞吐量
吞吐量是指单位时间内系统能够处理的请求数量,
通常以“请求/秒”(RPS)或“事务/秒”(TPS)为单位。
1、含义
吞吐量反映了系统的处理能力,即系统在单位时间内能够完成的工作量。
吞吐量越高,说明系统的处理能力越强。
2、计算公式
吞吐量 = 总请求数量 / 测试总时间
3、示例
如果在60秒内,系统处理了300个请求,则吞吐量为:
吞吐量 = 300 / 60 = 5 请求/秒
看看Jemeter里的性能指标
1、下面这些都是衡量响应时间
在JMeter中,以下是性能指标的含义:
1). 平均值(Average)
平均值是指所有样本的响应时间总和除以样本数量,单位为毫秒(ms)。它反映了整体的平均响应时间。
2). 中位数(Median)
中位数是将所有响应时间从小到大排序后位于中间位置的值。它表示有50%的请求响应时间小于或等于这个值。
3). 90%百分位
90%百分位表示有90%的请求响应时间小于或等于该值。它用于评估系统在大多数情况下的性能表现。
4). 95%百分位(95th Percentile)
95%百分位表示有95%的请求响应时间小于或等于该值。它更接近系统的极限性能表现,用于评估系统在高负载下的稳定性。
5). 99%百分位(99th Percentile)
99%百分位表示有99%的请求响应时间小于或等于该值。它反映了系统在极端情况下的性能表现,常用于评估系统的最大响应时间。
这些指标在性能测试中各有用途。平均值和中位数用于评估整体性能,而90%、95%和99%百分位则用于更细致地分析系统在不同负载下的表现。
6)最小值:最短的响应时间
7)最大值:最长的响应时间
2、衡量系统的稳定性
1). 异常率(Error Rate)
异常率是指在测试过程中,失败请求(如HTTP状态码为4xx或5xx的请求)占总请求的比例,通常以百分比形式表示。
-
含义:
-
异常率反映了系统在测试期间的稳定性。较高的异常率可能表明系统存在缺陷、性能瓶颈或资源不足。
-
异常率是衡量系统质量的关键指标之一,尤其是在高可用性和高可靠性要求的场景下。
-
-
计算公式:
异常率 = (失败请求总数 / 总请求总数) × 100%
-
示例:
-
如果总请求为1000次,其中失败请求为50次,则异常率为:
异常率 = (50 / 1000) × 100% = 5%
-
3、衡量系统的处理能力
1). 吞吐量(Throughput)
吞吐量是指单位时间内系统能够处理的请求数量,通常以“请求/秒”(Requests per Second,RPS)或“事务/秒”(Transactions per Second,TPS)为单位。
-
含义:
-
吞吐量反映了系统的处理能力,即系统在单位时间内能够完成的工作量。
-
吞吐量越高,说明系统的处理能力越强,能够同时处理更多的请求。
-
-
计算公式:
吞吐量 = 总请求数量 / 测试总时间(秒)
-
示例:
-
如果在60秒内完成了300个请求,则吞吐量为:
吞吐量 = 300 / 60 = 5 请求/秒
-
总结
-
异常率:衡量系统的稳定性,关注失败请求的比例。
-
吞吐量:衡量系统的处理能力,关注单位时间内的请求数量。
4、评估网络性能(带宽)
1). 接收KB/sec
接收KB/sec是指单位时间内从服务器接收的数据量,以“KB/秒”为单位。
-
含义:
-
接收KB/sec反映了网络传输的效率,即系统在单位时间内能够接收的数据量。
-
它主要用于评估网络带宽的利用率和数据传输的性能。
-
-
计算公式:
接收KB/sec = 总接收数据量(KB) / 测试总时间(秒)
-
示例:
-
如果在60秒内从服务器接收了1200KB的数据,则接收KB/sec为:
接收KB/sec = 1200 / 60 = 20 KB/秒
-
-
接收KB/sec:衡量网络传输效率,关注单位时间内的数据接收量。
2)发送KB/sec
发送KB/sec表示客户端在测试过程中向服务器发送数据的速率。它主要用于评估以下内容:
-
网络带宽利用率:发送KB/sec可以帮助评估客户端的网络带宽是否足够,以及网络传输是否顺畅。
-
请求负载:它反映了客户端在单位时间内发送的请求数据量,间接体现了测试的负载强度。
-
系统交互效率:发送KB/sec与接收KB/sec一起,可以分析客户端与服务器之间的交互效率。
2. 计算公式
发送KB/sec的计算公式为:
发送KB/sec = 总发送数据量(KB) / 测试总时间(秒)
3. 发送KB/sec与接收KB/sec的区别
- 发送KB/sec:主要用于分析客户端的请求负载和网络上传能力。
- 接收KB/sec:主要用于分析服务器的响应数据量和网络下载能力。
4、在性能测试中,发送KB/sec和接收KB/sec通常需要结合其他指标(如吞吐量、响应时间、异常率等)一起分析。例如:
-
如果发送KB/sec较高,但接收KB/sec较低,可能表明服务器处理请求的速度较慢,或者网络传输存在瓶颈。
-
如果发送KB/sec和接收KB/sec都较低,可能表明客户端或服务器的网络带宽不足,或者测试负载较低。
总结
-
发送KB/sec:衡量客户端向服务器发送数据的速率,反映客户端的请求负载和网络上传能力。
-
接收KB/sec:衡量客户端从服务器接收数据的速率,反映服务器的响应数据量和网络下载能力。
-
综合分析:通过对比发送KB/sec和接收KB/sec,可以更好地分析客户端与服务器之间的交互效率,以及网络传输的瓶颈。
这两个指标是网络性能分析中非常重要的部分,尤其是在分布式系统、Web应用和API测试中。
四、压测工具
1、Jmeter
建议用中文版,因为插件太多,其他的都建议英文版
Apache JMeter 是一款开源的、基于 Java 的性能测试工具,主要用于测试软件和应用程序的性能。它最初是为测试 Web 应用程序而设计的,但随着时间的推移,已经发展成为一款功能强大的通用性能测试工具,能够测试几乎所有类型的服务器、API 和网络协议。
1、JMeter 的主要功能和用途:
1)性能测试:
JMeter 可以模拟大量用户同时访问应用程序,从而测试系统的负载能力和响应时间。它可以帮助开发人员和测试人员评估应用程序在高并发场景下的性能表现。
2)压力测试:
通过不断增加并发用户数或请求频率,JMeter 可以帮助找到系统的性能瓶颈,例如服务器崩溃点或资源耗尽点。
3)接口测试:
JMeter 支持多种协议(如 HTTP/HTTPS、FTP、TCP、JDBC 等),可以用来测试 Web API、数据库、文件服务器等的性能和功能。
4)分布式测试:
JMeter 支持分布式测试架构,可以利用多台机器同时发送请求,从而模拟更大的负载。
5)测试结果分析:
JMeter 提供了丰富的监听器(Listener),可以实时显示测试结果,包括响应时间、吞吐量、错误率等。它还可以生成详细的测试报告,帮助分析性能问题。
6)脚本录制和回放:
JMeter 提供了代理服务器功能,可以录制用户操作(如在浏览器中的操作),并将这些操作转换为测试脚本,方便后续的性能测试。
2、JMeter 的应用场景:
1)Web 应用性能测试:测试网站在高并发访问下的响应时间和稳定性。
2)API 性能测试:测试 RESTful API 或 SOAP API 的性能,包括响应时间和数据处理能力。
3)数据库性能测试:通过 JDBC 协议测试数据库的查询性能和并发处理能力。
4)网络服务测试:测试 FTP、SMTP、POP3 等网络协议的性能。
5)企业级应用测试:用于测试企业级应用(如 ERP、CRM 等)在高负载下的表现。
3、JMeter 的优势:
1)开源免费:JMeter 是开源软件,完全免费,社区支持强大。
2)可扩展性强:通过插件和脚本,可以扩展其功能以满足特定需求。
3)跨平台:基于 Java 开发,可以在 Windows、Linux 和 macOS 上运行。
4)易用性:提供图形化界面,易于上手和使用。
2、常规操作
CMD输入Jmeter再回车,即可启动
1、简单的基准测试-创建线程组
线程数设置100,代表有100个请求同时发起
3、梯度压测-- 插件--Stepping Thread Group
Stepping Thread Group插件是一种用于模拟阶梯式加压的线程组工具,
主要用于性能测试,通过逐步增加并发用户数来模拟真实场景下的负载变化。
1、作用
1)逐步增加压力:通过设置不同的参数,Stepping Thread Group可以模拟从低到高逐步增加压力的场景,从而减少服务器的瞬时压力。
2)检测性能瓶颈:通过逐步增加压力,可以更清晰地观察系统在不同压力下的表现,从而找到性能瓶颈。
3)模拟真实场景:可以模拟如秒杀、打卡等具有时间规律的场景,帮助测试系统在高并发下的稳定性。
2、参数详解
This group will start:设置线程组【最终】启动的最大线程数,也是最大用户数。--上限,start-启动,not开始
First, wait for:启动第一个线程前的等待时间。
Then start:初始启动的线程数。
Next add:每次增加的线程数。
Threads every:每次增加线程的时间间隔。
Using ramp-up:每次增加线程的加速时间。0的话,表示立马增加,5表示5s内增加到
Then hold load for:达到最大线程数后持续运行的时间。
Finally, stop:线程停止的策略,如每秒停止多少线程。
3、使用场景
1)负载测试:通过逐步增加线程数,找到系统的性能瓶颈。
2)稳定性测试:在达到最大线程数后保持一段时间,观察系统是否稳定。
3)模拟真实业务场景:如模拟用户在特定时间大量涌入的场景。
4、安装方法
下载插件:访问JMeter Plugins,下载jmeter-plugins-manager。
将下载的.jar文件放入JMeter的lib/ext目录。
重启JMeter,通过插件管理器安装Custom Thread Groups。
报错的策略
1、继续向下执行
2、重新开启
3、停掉该线程,继续其他线程
4、慢慢停掉线程组,直到停止测试
5、立马停掉线程组,停止测试
四、如何开启性能测试
设置的 线程数 = 并发目标 / 最大响应时间(秒)
如果,并发目标是500,响应时间是1s,那么线程数是 500 / 1 =500
如果,并发目标是500,响应时间是0.5s(500ms),那么线程数是 500/0.5=1000
并发目标:我们希望线程组单位时间最大可以同时处理的请求数量,本质是数量,单位是个
线程数:就是处理请求的效率,单位是 个/秒
响应时间:就是单个请求最大的处理时间,单位是秒
系统能够在5分钟内能完成5000笔查询业务,同时每个用户响应时间不超过3s,该用多少线程数施压?
计算公式:最大线程数= (单次响应时间*总业务量)/总的业务时间
答案:50 = (3 * 5000) / 5*60
其实就是 总业务量/总时间 = 线程数 (效率)
理解线程数、并发数、请求数
一个餐馆有3个服务员,同时来了8个客人 ,此时有3位客人被服务,其余5人等待服务,
那么线程数是3(服务员),并发数是3(正在处理的客人),请求数是8(同时来的所有客人)
1、系统的线程数--处理效率
线程数通常是由系统设计和资源配置决定,通常会有一个最大线程数限制
性能测试工具中(如JMeter):线程数是测试脚本中设置的虚拟用户数
2、并发数--单位时间处理的任务量
是指在某一时刻同时处理的请求数量。它是一个瞬时值,反映了系统的当前负载
例如,一个Web服务器可能在某一时刻有10个并发请求,而在下一时刻有20个并发请求。
并发数可以小于、等于或大于线程数。当并发数大于线程数时,系统会通过排队等待的方式处理多余的请求。
3、请求数--任务总量
是指系统在一段时间内接收到的请求总数。它是一个累计值,反映了系统的总负载
线程数:是系统能够同时处理的最大任务数量,通常由系统设计和资源限制。
并发数:是实际同时处理的任务数量,是动态变化的。
请求数:是系统在一段时间内接收到的总任务数量,是一个累计值。
并发目标是效率,不是数量,表示1s可以处理多少个请求
1、线程数(服务员数量):
假设餐厅有3个服务员,这就好比系统有3个线程。
2、并发数(同时点餐的顾客数量):
1)如果在同一时刻有3位顾客同时来到餐厅并准备点餐,那么并发数就是3。
2)如果有5位顾客同时来到餐厅,但只有3个服务员,那么并发数仍然是3(因为服务员数量有限,只能同时服务3位顾客),剩下的2位顾客需要排队等待。
3、响应时间(顾客等待和点餐的时间):
1)如果餐厅有3个服务员,同时来了3位顾客,每个服务员可以立即接待一位顾客,那么响应时间会很短。
2)如果同时来了5位顾客,但只有3个服务员,那么前3位顾客可以立即被接待,而剩下的2位顾客需要等待。这会导致响应时间变长,因为他们需要排队等待空闲的服务员
4、某一时刻的请求数与并发数的关系
并发数是系统正在处理的请求数量,是系统负载的一个重要指标。
某一时刻的请求数包括了**“正在处理的请求”和“排队等待的请求”**,是系统接收到的总请求数量。
联系:并发数是某一时刻的请求数中的一部分,即正在处理的那部分请求。
举例:
假设一个餐厅有3个服务员,同时来了5位顾客,那么某一时刻有3位顾客正在被接待,同时还有2位顾客在排队等待。
1)并发数是3(正在被接待的顾客)。
2)某一时刻的请求数是5(包括正在被接待的3位顾客和排队等待的2位顾客)。
线程数 = 虚拟用户数(其实还是服务员的概念):
这些虚拟用户会向系统发送请求,1个虚拟用户可以发N个请求
这是 JMeter 中设置的“并发用户上限”,表示 JMeter 可以同时启动的最大虚拟用户数量。
线程数(虚拟用户数):
如果线程数设置为100,这意味着 JMeter 最大可以同时启动(服务)100个虚拟用户。
(虚拟用户数)
用户数 ≠ 线程数:
用户数通常是指 在测试期间,所有虚拟用户发送的总请求数量。它是一个累计值,表示系统在一段时间内接收到的总负载。而线程数是同时运行的虚拟用户数量。
用户数(请求数):
用户数是所有虚拟用户在测试期间发送的总请求数量。
如果每个虚拟用户发送了10个请求,那么用户数是100个虚拟用户 × 10个请求 = 1000个请求
线程数(虚拟用户数):是 JMeter 设置的虚拟用户总数,表示 JMeter 可以同时启动的最大用户数量。
并发数:是实际同时发送请求的用户数量,取决于系统的处理能力和请求的到达速率。
用户数(请求数):是所有虚拟用户在测试期间发送的总请求数量,是一个累计值。
2、基准测试--进行探底
1、接口的连通性
2、大概的性能探底
JMeter的基准测试(Benchmark Testing)是一种用于
评估系统在无压力或低压力条件下的性能表现的测试方法。
基准测试是性能测试的基础环节,通过它可以获得系统在理想状态下的性能指标
基准测试的主要目标
1)验证测试脚本的正确性/接口的联通性:确保测试脚本能够正确执行,且所有事务都能成功返回。
2)获取系统理论上的最快响应时间:在无压力的情况下,测量系统处理单个请求的性能指标,如响应时间。
3)为后续测试提供参考:基准测试的结果可以作为后续并发测试、负载测试等的对比基准
步骤:
基准测试的实施步骤
1)创建测试计划:在JMeter中创建一个新的测试计划。
2)添加线程组:设置线程数为1(单用户测试),循环次数为1或多次,以验证脚本的稳定性和重复性。
3)配置HTTP请求:添加HTTP请求,配置目标接口的URL、方法等参数。
4)添加监听器:添加聚合报告或查看结果树等监听器,用于收集和分析测试结果。
5)运行测试:执行测试并观察结果,重点关注响应时间、成功率等指标。
1)创建线程组
2)关联接口
添加参数
3)
做基准测试,要把其他的禁用掉
4)启动
5)查看结果
6)查看聚合报告
7)通过基准测试,拿到吞吐量、最大值、
通过300、500、800、1000这样进行一个基线的排查,去探底瓶颈
一个线程的