Nginx 性能优化
Posted 我的紫霞辣辣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 性能优化相关的知识,希望对你有一定的参考价值。
性能优化概述
基于nginx性能优化,那么在性能优化这一章,我们将分为如下几个方面做介绍
- 首先,我们需要了解性能优化要考虑哪些方面。
- 然后我们需要了解性能优化必须要用到的压力测试工具ab。
- 最后我需要了解系统上有哪些注意和优化的点,以及Nginx配置文件做哪些调整。
我们在性能优化工作前,我们重点需要考虑哪些方面,和了解哪些方面
- 首先需要了解我们当前系统结构和瓶颈,了解当前使用的是什么,运行的是什么业务,都有哪些服务,了解每个服务最大能支撑多大的并发,比如Nginx作为静态资源服务的并发是多少,最高的瓶颈在哪里,能支持多少pqs(每秒查询率)的访问请求等,也可以通过日志去分析请求的情况,当然也可以通过我们前面介绍到的stub_status模块查看当前的连接情况,也可以对线上的业务进行压力测试(低峰期),去了解当前这套系统能承担多少的请求和并发,已做好相应的评估,这个是我们做性能优化最先考虑的地方。
- 其次我们需要了解业务模式。虽然我们是做性能优化,但每一个优化都是为了业务所提供服务的,我们需要了解每个业务接口的类型,比如:电商网站中的抢购模式,这种情况下面,平时没什么流量,但到了抢购时间流量会突增。
我们还需要了解系统层次化的结构,比如 : 我们使用Nginx做的是代理,还是动静分离,还是后端直接服务用户,那么这个就需要我们对每一层做好相应的梳理。以便更好的服务业务。 - 最后我们需要考虑性能与安全,往往注重了性能,但是忽略了安全。往往过于注重安全,性能又会产生影响。比如 : 我们在设计防火墙功能时,检查过于严密,这样就会给性能带来影响。那么如果对于性能完全追求,却不顾服务的安全,这个也会造成很大的隐患,所以需要评估好两者的关系,把握好两者的孰重孰轻。以及整体的相关性,权衡好对应的点。
从OSI七层模型去考虑
硬件: 代理(cpu),静态(磁盘空间、IO),动态(cpu、内存)
网络: 网络是否有延迟,网卡是否有丢包
系统: 文件句柄(文件描述符)
应用: 服务与服务之间保持长连接 http1.1(开启长链接会占用端口,状态会变成TIME_WAIT) # netstat -an命令查看端口号状态
服务: Nginx静态资源服务优化
压力测试工具ab
在系统业务量没有增长之前,我们就要做好相应的准备工作,已防患业务量徒增带来的接口压力,所以对于接口压力测试就显得非常重要了。我们首先要评估好系统压力,然后是由工具检查当前系统情况,是否能满足对压力的需求。
静态资源压力测试
- 创建静态资源数据
- web01服务器
1. 修改Nginx配置文件
vim /etc/nginx/conf.d/try.conf
server {
listen 80;
server name _;
location / {
root /code;
try_files $uri @java; # $uri,输入192.168.15.7/tt.html,可以正常访问到数据 否则返回@java的数据
}
location @java {
proxy_pass http://127.0.0.1:8080; # 本地回环地址tomcat(端口号8080)
}
}
2. 创建Nginx配置文件指定的数据文件
echo "nginx ab" > /code/tt.html
3. 重启Nginx服务
systemctl restart nginx
- ab工具进行压力测试
1. 安装ab压力测试工具
yum install httpd-tools
2. ab命令使用格式及其常用的参数
ab -n10000 -c200 http://127.0.0.1/tt.html/
-n : 总的请求数
-c : 同时并发的请求数
-k : 开启长连接(http1.1)
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: nginx/1.20.0 Nginx版本
Server Hostname: 127.0.0.1 主机
Server Port: 80 端口
Document Path: /tt.html/ 路径
Document Length: 157 bytes 字节
Concurrency Level: 200 并发数200
Time taken for tests: 1.999 seconds 请求的总时间
Complete requests: 10000 总请求
Failed requests: 0 失败的请求
Write errors: 0
Non-2xx responses: 10000
Total transferred: 3090000 bytes 所以请求总共占用的字节
HTML transferred: 1570000 bytes 传输的字节
Requests per second: 5001.76 [#/sec] (mean) qps每秒能处理多少请求(这个参数是重点!!!)
Time per request: 39.986 [ms] (mean) 客户端请求服务端的时间(毫秒)
Time per request: 0.200 [ms] (mean, across all concurrent requests) 服务端每个请求处理的时间(毫秒)
Transfer rate: 1509.32 [Kbytes/sec] received 传输的速率(网络问题)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 10 82.9 3 1005
Processing: 5 23 9.9 19 225
Waiting: 1 20 10.5 16 224
Total: 5 33 83.0 23 1039
Percentage of the requests served within a certain time (ms)
50% 23
66% 31
75% 33
80% 34
90% 36
95% 38
98% 40
99% 42
100% 1039 (longest request)
动态资源压力测试
1. 下载tomcat软件包
wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-10/v10.0.6/bin/apache-tomcat-10.0.6.tar.gz
2. 解压tomcat软件包
tar -xf apache-tomcat-10.0.6.tar.gz
3. 创建tomcat动态资源
cd apache-tomcat-10.0.6/webapps/ROOT/
mv /code/tt.html ./
4. 启动tomcat程序
yum -y install java
cd /root/apache-tomcat-10.0.6/
./bin/startup.sh 启动tomcat服务
netstat -lntp 查看tomcat端口号
# tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1890/java 关闭端口
# tcp6 0 0 :::8080 :::* LISTEN 1890/java 对外提供访问的端口
5. 进行ab压力测试
ab -n10000 -c200 http://127.0.0.1/tt.html/
Requests per second: 1033.30 [#/sec] (mean) qps每秒能处理多少请求(这个参数是重点!!!)
- 测试结果
我们很明显的可以感受到Nginx处理静态资源的速度明显比tomcat处理动态资源的速度要快很多
所以我们通常会用tomcat解析专门的jsp文件,Nginx通常会用来处理静态资源
以上是关于Nginx 性能优化的主要内容,如果未能解决你的问题,请参考以下文章