[技能升级]如何对你的网站进行访问压测

为什么要进行压力测试?

对于个人站长而言,可能这方面的需求并不大,或者说很多的个人站长都不知道有这么个玩意。

在中大型互联网公司,不管是做网站还是APP等服务,都是需要进行访问压力测试的,访问压力测试可以评估网站或APP所能承载多大的用户访问而不至于出现崩溃。

这也是评估程序架构和代码优化的一项重要指标,因为如果说设计出来的产品只能应对少量的并发,那么就是一个失败的产品,必须要对程序和架构进行优化。

同时一个好的架构和程序设计可以让我们在一些便宜的机器上也能承受住期望的并发,从而节省设备购买的成本。

而对于我们SEO而言,如果网站可以承受更大的并发,拥有更快的访问速度,更快的程序响应,无疑会增加爬虫和用户的访问体验,用以获得更多的收录和用户量。

用什么进行压力测试

目前市面上主流的压测软件有两款(我知道的),一个是Apache的ab压测,一个是wrk压测工具。

本文主要讲解wrk压测工具的使用,为什么呢?原因有以下几点:

  • 轻量级性能测试工具;
  • 安装简单(相对 Apache ab 来说);
  • 学习成本基本为零,看完本文你就学会了;
  • 基于系统自带的高性能 I/O 机制,如 epoll, kqueue, 利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量;

当然了,wrk也有其缺点,目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,但是对于我们个人站长而言,已经足够使用了,就算你是做后端开发的也足够用它来测试你的程序性能啦。

wrk如何安装?

wrk 只能被安装在类 Unix 系统上,所以我们需要一个 Linux 或者 MacOS 环境。Windows系统需要安装Linux虚拟机,如果是win10的可以安装centos或Ubuntu子系统(自行百度)或者使用VMware安装你熟悉的Linux系统。

Linux系统安装wrk

  • centos安装
sudo apt-get install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
# 将可执行文件移动到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin
  • centos 安装
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git 
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
# 将可执行文件移动到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin

MacOs 安装 wrk

Mac下主要用brew命令工具进行安装,如果没有安装brew的请先移步https://brew.sh/index_zh-cn进行安装。然后执行以下命令

brew install wrk

安装需要一点时间,请耐心等待。

检查一下是否安装成功

wrk -v

出现这些就算是安装成功啦。

[技能升级]如何对你的网站进行访问压测

如何使用wrk

一秒钟入门

wrk -t8 -c100 -d30s https://www.baidu.com

这条命令的意思就是说使用8个线程,模拟100个并发请求连接接持续30秒钟对百度首页进行访问压测。得到的结果如下:

[技能升级]如何对你的网站进行访问压测

需要注意的是,这个每个机子以及每次测试可能结果不太一样,但是相同参数下应该差别不大。

看到这一大堆的数据,看不懂?没关系,我来给大家说下就好了。

Running 30s test @ https://www.baidu.com  # 运行30秒测试百度
  8 threads and 100 connections  # 8线程 100个并发
  (线程状态)    (平均值)(标准差)(最大值) (正负一个标准差所占比例)
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    (延迟)
    Latency   248.08ms  250.03ms   2.00s    87.62%
    (每秒请求数)
    Req/Sec    57.64     27.46   181.00     64.90%
  13205 requests in 30.09s, 197.98MB read (30.09秒内发送了13205个请求,读取了197.98MB的数据)
  (socket错误信息)
  Socket errors: connect 0, read 10, write 0, timeout 17
Requests/sec:    438.81  (QPS也就是每秒请求数)
Transfer/sec:      6.58MB  (每秒传输数据量)

上面的只是一个简单的报告信息,其实还有一个比较重要的延迟统计信息,需要添加一个参数--latency

这里也顺便说一下,各个参数的意思

使用方法: wrk <选项> <被测HTTP服务的URL>                            
  Options:                                            
    -c, --connections <N>  跟服务器建立并保持的TCP连接数量  
    -d, --duration    <T>  压测时间           
    -t, --threads     <N>  使用多少个线程进行压测

-s, --script <S> 指定Lua脚本路径
-H, --header <H> 为每一个HTTP请求添加HTTP头
--latency 在压测结束后,打印延迟统计信息
--timeout <T> 超时时间
-v, --version 打印正在使用的wrk的详细版本信息

<N>代表数字参数,支持国际单位 (1k, 1M, 1G)
<T>代表时间参数,支持时间单位 (2s, 2m, 2h)

下面我们再来看看添加了延迟统计信息之后的报告是什么样的

[技能升级]如何对你的网站进行访问压测

这里我们可以看到多出了一个延迟分布信息,解析一下:有50%的请求在138毫秒内返回数据了,75%的请求在352毫秒内返回,90%的请求在581毫秒内返回,99%的请求在1.36秒内返回。

可以看到,百度的响应还是很快的,基本在一秒内搞定,我们用同样的参数测试一下其他的站点看看对比。

[技能升级]如何对你的网站进行访问压测

可以看到,小说站点的测试报告跟百度还是有很大的差别的。

下面我们来说一下报告里面的一些参数及其意义。

  1. 延迟的平均值越小说明访问速度就越快,网站的性能就越好
  2. 标准差如果太大说明样本本身离散程度比较高,有可能系统性能波动较大。
  3. 每秒请求数越多,说明服务器和网站性能越好,处理速度就越快。
  4. 延迟分布里面,90%的请求响应数值越小,说明访问速度就越快,可以承受更大的并发。
  5. socket连接错误信息越少,说明服务器网络比较好,性能越高。
  6. 每秒处理的请求数越大(QPS),那么可以承受的并发数越大。百度一秒可以处理433个请求,但是众横小说却只能处理43个请求,什么概念呢?也就是说在一天86400秒的时间了,百度可以处理3741万个请求,众横只能处理371万个请求。当然了,它们这些大站都有分布式集群服务器和CDN等,因此实际的承受压力肯定比这个数值大很多,不然百度也不能每天处理百亿的请求了。

最后要说明一点,关于线程数,并不是设置的越大,压测效果越好,线程设置过大,反而会导致线程切换过于频繁,效果降低,一般来说,推荐设置成压测机器CPU核心数的2倍到4倍就行了。

还有,对于我们个人站长来说,我们主要测试网站的各类页面,包括首页、列表页、详情页以及其他聚合页面等。主要分析各类页面的访问压力,看看是否有需要优化的地方,是否可以优化一下网站的模板语法减少随机调用,优化SQL的慢查询等等从而提升网站的访问速度,如果自己解决不了的,是否可以通过买更高配置的服务器或CDN或者Redis缓存等手段来解决访问速度的问题。

好了,本次技能升级就到这里结束了,希望对你有所帮助哦。

THE END
分享
二维码
海报
[技能升级]如何对你的网站进行访问压测
为什么要进行压力测试? 对于个人站长而言,可能这方面的需求并不大,或者说很多的个人站长都不知道有这么个玩意。 在中大型互联网公司,不管是做网站还是A……
<<上一篇
下一篇>>