一、资源压缩
如果一个静态资源的过大,传输起来肯定越慢,并且会占用大量带宽,因此在项目部署时可以通过Nginx
对于静态资源实现压缩传输。Nginx
提供了三个支持资源压缩的模块ngx_http_gzip_module、ngx_http_gzip_static_module、ngx_http_gunzip_module
,其中ngx_http_gzip_module
属于内置模块。
开启资源压缩:
http{
# 开启压缩机制
gzip on;
# 指定会被压缩的文件类型(也可自己配置其他类型)
gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
# 设置压缩级别,越高资源消耗越大,但压缩效果越好
gzip_comp_level 5;
# 在头部中添加Vary: Accept-Encoding(建议开启)
gzip_vary on;
# 处理压缩请求的缓冲区数量和大小
gzip_buffers 16 8k;
# 对于不支持压缩功能的客户端请求不开启压缩机制
gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩
# 设置压缩响应所支持的HTTP最低版本
gzip_http_version 1.1;
# 设置触发压缩的最小阈值
gzip_min_length 2k;
# 关闭对后端服务器的响应结果进行压缩
gzip_proxied off;
}
二、使用epoll网络模型
Nginx
是基于多路复用模型实现的,但默认的多路复用模型 select/poll
最大只能监听1024
个连接,而epoll
则属于 select/poll
接口的增强版,因此切换为epoll
模式能够大程度上提升单个Worker的性能:
events {
# 使用epoll网络模型
use epoll;
# 调整每个Worker能够处理的连接数上限
worker_connections 10240;
}
三、开启CPU亲和机制
在实际项目中进程或线程数往往都会远超出系统CPU
的核心数,操作系统执行原理本质上是采用时间片切换机制,也就是一个CPU
核心会在多个进程之间不断频繁切换,造成很大的性能损耗。而CPU
亲和机制则是指将每个Nginx
的工作进程,绑定在固定的CPU
核心上,从而减小CPU
切换带来的时间开销和资源损耗:
worker_cpu_affinity auto;
四、调整Worker工作进程
Nginx启动后默认只会开启一个Worker
工作进程处理客户端请求,而我们可以根据机器的CPU
核数开启对应数量的工作进程,以此来提升整体的并发量:
worker_processes auto; # 自动根据CPU核心数调整Worker进程数量
同时也调整每个工作进程能够打开的文件句柄数:
worker_rlimit_nofile 20000; # 每个Worker能打开的文件描述符,最少调整至1W以上,负荷较高建议2-3W
五、长连接配置
建议开启HTTP
长连接,用户减少握手的次数,降低服务器损耗:文章来源:https://www.toymoban.com/news/detail-405319.html
upstream xxx {
# 长连接数
keepalive 32;
# 每个长连接提供的最大请求数
keepalived_requests 100;
# 每个长连接没有新的请求时,保持的最长时间
keepalive_timeout 60s;
}
六、使用零拷贝技术
零拷贝读取机制与传统资源读取机制的区别:文章来源地址https://www.toymoban.com/news/detail-405319.html
- 传统方式:硬件–>内核–>用户空间–>程序空间–>程序内核空间–>网络套接字
- 零拷贝方式:硬件–>内核–>程序内核空间–>网络套接字
sendfile on; # 开启零拷贝机制
到了这里,关于Nginx 性能优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!