高性能Web平台-OpenResty压力测试和调优

1,239 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情


1.写在前面

在上一篇文章中,我们分享了高性能Web平台-OpenResty安装部署教程。

具体的详情可以查看:高性能Web平台-OpenResty安装部署

好了,那今天我们继续往下开始分享:

  • OpenResty压力测试
  • OpenResty调优

那就废话不多说了,直接上正菜吧:

image.png

2.OpenResty压力测试

2.1 默认页压测

那我们先来测试OpenResty的默认首页,感受OpenResty强大性能。

image.png

2.1.1 压测配置

线程组:

  • 线程数: 500 个
  • ramp-up时间:5s
  • 循环次数: 2000 次

image.png

Http请求:

image.png

jmeter的使用,可以看一下我之前的文章,这里就不再展开了。这里分享一下jmeter的插件

1、PerfMon:监控服务器硬件,如CPU,内存,硬盘读写速度等
    Allows collecting target server resource metrics

2、Basic Graphs:主要显示平均响应时间,活动线程数,成功/失败交易数等
    Average Response Time 平均响应时间
    Active Threads 活动线程数
    Successful/Failed Transactions 成功/失败 事务数

3、Additional Graphs:主要显示吞吐量,连接时间,每秒的点击数等
    Response Codes
    Bytes Throughput
    Connect Times
    Latency
    Hits/s

2.1.2 测试结果

  • 聚合报告:

image.png

  • RT(实时):

image.png

  • TPS(实时):

image.png

2.1.3 小结:

测试结果:TPS:4567/sec,响应时间RT:98ms

2.2 应用首页压测

应用首页部署,配置后端服务反向代理,这样我们既可以直接访问应用前端服务,也可以通过nginx访问后端服务api,然后进行压力测试。

2.2.1 部署配置

静态资源与反向代理部署配置:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;  
    sendfile        on;   
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        # 应用首页 
        location /llsydn { 
            alias D:\llsydn\dist; 
            index index.html index.htm; 
        }
    }

}

2.2.2 压测配置

线程组:

  • 线程数: 500 个
  • ramp-up时间:5s
  • 循环次数: 2000 次

Http请求:

image.png

2.2.3 测试结果

  • 聚合报告:

image.png

  • RT:

image.png

  • TPS:

image.png

2.2.4 小结:

TPS:2k,响应时间RT:233ms

3. OpenResty调优:

3.1 压缩传输数据

3.1.1 压缩首页

压缩应用首页

image.png

3.1.2 测试报告

聚合报告:

image.png

3.1.3 小结:

  • 优化前:测试结果:TPS-2k,响应时间-233ms
  • 优化后:测试结果:TPS-11k ,响应时间-24ms

结论:压缩页面,可以大幅TPS,但是并不能影响网络传输数据量的大小

3.2 Gzip压缩传输

3.2.1 配置压缩传输

使用gzip压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约成本,所以说这是一个重点。

Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate。

一般我们需要压缩的内容有:文本,js,html,css。对于图片,视频,flash什么的不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!

gzip on;
gzip_min_length 10k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain text/css text/javascript application/json
application/javascript application/x-javascript application/xml;

gzip on; #开启压缩功能

gzip_min_length 10k #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是 0 ,不管页面多大都进行压缩,建议设置成大于1K,如果小与1K可能会越压越大。

gzip_http_version 1.1 #压缩版本,用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。

gzip_comp_level 6 #压缩比例,用来指定GZIP压缩比, 1 压缩比最小,处理速度最快, 9 压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。

gzip_types text/css text/xml application/json :#用来指定压缩的类型,‘text/html’类型总是会被压缩。默认值: gzip_types text/html (默认不对js/css文件进行压缩)

注意:Gzip压缩,是需要客户端支持的!如果客户端不支持Gzip压缩,你在服务端配置也将无效!

配置开启客户端请求压缩支持:

image.png

添加个header请求头:accept-encoding: gzip

注意:

  • 压缩类型,匹配MIME型进行压缩;
  • 不能用通配符 text/*;
  • text/html默认已经压缩 (无论是否指定);
  • 设置哪压缩种文本文件可参考 conf/mime.types。

3.2.2 测试报告

  • 聚合报告

image.png

3.2.3 小结:

  • 优化前:测试结果:TPS-11k,响应时间-24ms
  • 优化后:测试结果:TPS-1.3k,响应时间-318ms

结论:开启压缩传输,增加响应时长,增加CPU消耗。网络传输数据量,下降 200 倍,TPS,下降 10 倍。 生产阶段,根据线上环境合理调整。待优化

服务器调优:

  • CPU
  • 内存
  • 网络IO

3.3 释放多核CPU性能

3.3.1 配置多核支持

默认情况下,只有一个worker占用一个CPU,通过配置可以开启多个worker从而提升整体性能,Nginx不同work工作的进程绑定到不同的CPU上,就能减少在work间不断的切换CPU,减少性能损耗

# 指定worker绑定指定CPU
# Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按 1 看出来,也可以查看/proc/cpuinfo文件

grep ^processor /proc/cpuinfo | wc -l
# worker数,与CPU核数一致
worker_processes  4;

3.3.2 测试报告

聚合报告:

image.png

3.3.3 小结:

  • 优化前:测试结果:TPS-1.2k,响应时间-153ms
  • 优化后:测试结果:TPS-3.6k,响应时间-140ms

结论:开启多核CPU支持,CPU消耗继续增加,网络传输数据量增加,同时TPS增长 3 倍。


好了,以上就是高性能Web平台-OpenResty压力测试和调优的分享了。

个人理解,可能也不够全面,班门弄斧了。

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png