常见的网站压测工具介绍与使用

简介: 压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。

压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。

Apache Ab

Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 ,简单易用。 使用起来非常的简单和方便。 不仅仅是可以apache服务器进行网站访问压力测试,还可以对其他类型的服务器进行压力测试。 比如nginx,tomcat,IIS等

官网:http://httpd.apache.org/docs/2.2/programs/ab.html

参数说明

Usage: ab [options] [http[s]://]hostname[:port]/path
用法:ab [选项] 地址

选项:
Options are:
    -n requests    #执行的请求数,即一共发起多少请求。
    -c concurrency    #请求并发数。
    -t timelimit    #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
    -s timeout    #指定每个请求的超时时间,默认是30秒。
    -b windowsize    #指定tcp窗口的大小,单位是字节。
    -B address    #指定在发起连接时绑定的ip地址是什么。
    -p postfile    #指定要POST的文件,同时要设置-T参数。
    -u putfile    #指定要PUT的文件,同时要设置-T参数。
    -T content-type    #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。
    -v verbosity    #设置详细模式等级。
    -w    #将结果输出到html的表中。
    -i    #使用HEAD方式代替GET发起请求。
    -y attributes    #以表格方式输出时,设置html表格tr属性。
    -z attributes    #以表格方式输出时,设置html表格th或td属性。
    -C attribute    #添加cookie,比如'Apache=1234'。(可重复)
    -H attribute    #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)
    -A attribute    #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
    -P attribute    #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
    -X proxy:port   #指定代理服务器的IP和端口。
    -V              #打印版本信息。
    -k              #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
    -d              #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
    -q              #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
    -g filename     #把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
    -e filename     #产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
    -r              #当收到错误时不要退出。
    -h              #输出帮助信息
    -Z ciphersuite  指定SSL/TLS密码套件
    -f protocol     指定SSL/TLS协议(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

压测测试

ab -c 10 -n 1000 -k "http://www.baidu.com/"
This is ApacheBench, Version 2.3 <{
   
   mathJaxContainer[0]}>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.baidu.com (be patient)
Completed 100 requests                   //* 已完成请求数
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        BWS/1.1          //* 请求的服务器名称、版本号
Server Hostname:        www.baidu.com    //* 请求的地址
Server Port:            80               //* 请求的端口号

Document Path:          /                //* 请求的绝对路径,即具体接口名称
Document Length:        199875 bytes     //* 响应数据的大小

Concurrency Level:      10              //* 并发用户数
Time taken for tests:   14.567 seconds  //* 测试总耗时 ,单位:s
Complete requests:      1000            //* 总请求数
Failed requests:        988             //* 失败总请求数
   (Connect: 0, Receive: 0, Length: 988, Exceptions: 0) 
Write errors:           0                //* 发送请求失败的次数
Total transferred:      198476425 bytes   //* 从服务端收到的总字节数
HTML transferred:       197338475 bytes   //* 从服务端收到的总文档字节数,即不包含Total transferred中的HTTP头信息
Requests per second:    68.65 [#/sec] (mean)  //* 平均每秒请求数,即吞吐量
Time per request:       145.672 [ms] (mean)   //* 平均每次请求并发用户总耗时,即 该值=平均每次请求耗时 * 并发数  ,单位:ms
Time per request:       14.567 [ms] (mean, across all concurrent requests) //* 平均每次请求耗时 ,单位:ms
Transfer rate:          13305.53 [Kbytes/sec] received                  //* 服务端每秒响应的数据大小,单位: kb/s

Connection Times (ms)                       //* 网络耗时 (依次是:最小、平均、标准偏差、中位数、最大) ,单位:ms
              min  mean[+/-sd] median   max
Connect:        6   16  89.3      8    1011
Processing:    22  127 160.5     73    1919
Waiting:        8   23  53.5     10     499
Total:         28  143 182.4     82    1927

Percentage of the requests served within a certain time (ms)   //* 请求耗时分布情况百分比 ,单位:ms 
  50%     82
  66%    105
  75%    134
  80%    284
  90%    321                                                  //* 表示 90%的请求在 321ms 内得到服务端响应结果
  95%    367
  98%    746
  99%   1038
 100%   1927 (longest request)

Jmeter

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

Windows 安装

Mac 安装

JavaJDK 安装

JDK安装此处略去,不作为文本的介绍的重点,读者可自行Google。

Jmeter安装

进入JMeter的下载地址页面,如下图,有两个版本可供下载

  • Binaries:二进制版,即已经编译好、可直接执行;
  • Source:源代码版,需要自己编译;

将此软件下载后,进行解压

image-20210428172549027

启动jmeter

进入 jmeter 的 bin 目录,执行 sh jmeter 命令,即可启动 jmeter 软件

image-20210428173312994

改为中文

image-20210428173207009

相关文章
|
PHP 数据安全/隐私保护
在PHP中使用AES进行加密和解密
在PHP中使用AES进行加密和解密
1027 0
|
Linux 开发工具 C语言
Centos8下编译安装最新版ffmpeg解决方案(含Centos8换源阿里云)
Centos8下编译安装最新版ffmpeg解决方案(含Centos8换源阿里云)
2441 3
|
3月前
|
人工智能 运维 架构师
智能体来了:重新定义 AI Agent 搭建师的核心能力与职业路径
随着AI Agent成为企业智能化闭环核心,AI Agent搭建师应运而生。本文从工程化视角解析其全链路职责,并指出在技术平民化趋势下,真正不可替代的是需求抽象、系统架构、风险治理与跨域适配四大体系化能力,呼吁构建T型/π型知识结构,实现从“编码者”向“系统架构师”跃迁。(239字)
232 6
智能体来了:重新定义 AI Agent 搭建师的核心能力与职业路径
|
网络协议 测试技术 网络安全
|
7月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
测试技术 Apache
免费压测工具
很多的web应用在搭建服务器完成后,为了让搭建的服务能够满足用户的访问需求,通常需要测试自己应用的并发连接能力。需要使用一些压测工具,本文介绍一些免费的开源的压测工具,可以用于简单的压力测试(实验均在Linux系统下)。
9917 155
|
Kubernetes 网络协议 网络安全
Pod之间的通信问题
【10月更文挑战第6天】
710 4
|
编解码 前端开发 JavaScript
前端:Rem 及其转换原理
Rem是一种用于前端开发的相对字体大小单位,它基于根元素的字体尺寸来定义文本大小,有助于实现响应式布局和可维护性。Rem的转换原理是通过相对于HTML根元素的字体大小来设置子元素的字体大小,从而实现统一的比例调整,提高页面的适应性和灵活性。此方法简化了跨浏览器和设备的布局调整,增强了用户体验。
|
SQL Java 关系型数据库
性能工具之JMeter JDBC Request 基础
JDBC 本质其实是官方(sun 公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动 jar 包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类。
906 0
性能工具之JMeter JDBC Request 基础