携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
1.写在前面
在上一篇文章中,我们分享了高性能Web平台-OpenResty安装部署教程。
具体的详情可以查看:高性能Web平台-OpenResty安装部署
好了,那今天我们继续往下开始分享:
- OpenResty压力测试
- OpenResty调优
那就废话不多说了,直接上正菜吧:
2.OpenResty压力测试
2.1 默认页压测
那我们先来测试OpenResty的默认首页,感受OpenResty强大性能。
2.1.1 压测配置
线程组:
- 线程数: 500 个
- ramp-up时间:5s
- 循环次数: 2000 次
Http请求:
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 测试结果
- 聚合报告:
- RT(实时):
- TPS(实时):
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请求:
2.2.3 测试结果
- 聚合报告:
- RT:
- TPS:
2.2.4 小结:
TPS:2k,响应时间RT:233ms
3. OpenResty调优:
3.1 压缩传输数据
3.1.1 压缩首页
压缩应用首页
3.1.2 测试报告
聚合报告:
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压缩,你在服务端配置也将无效!
配置开启客户端请求压缩支持:
添加个header请求头:accept-encoding: gzip
注意:
- 压缩类型,匹配MIME型进行压缩;
- 不能用通配符 text/*;
- text/html默认已经压缩 (无论是否指定);
- 设置哪压缩种文本文件可参考 conf/mime.types。
3.2.2 测试报告
- 聚合报告
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 测试报告
聚合报告:
3.3.3 小结:
- 优化前:测试结果:TPS-1.2k,响应时间-153ms
- 优化后:测试结果:TPS-3.6k,响应时间-140ms
结论:开启多核CPU支持,CPU消耗继续增加,网络传输数据量增加,同时TPS增长 3 倍。
好了,以上就是高性能Web平台-OpenResty压力测试和调优的分享了。
个人理解,可能也不够全面,班门弄斧了。
如果觉得有收获的,帮忙点赞、评论、收藏
一下呗!!!