0


Nginx 性能优化

一、资源压缩

如果一个静态资源的过大,传输起来肯定越慢,并且会占用大量带宽,因此在项目部署时可以通过

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

长连接,用户减少握手的次数,降低服务器损耗:

upstream xxx {  
    # 长连接数  
    keepalive 32;  
    # 每个长连接提供的最大请求数  
    keepalived_requests 100;  
    # 每个长连接没有新的请求时,保持的最长时间  
    keepalive_timeout 60s;  
}  

六、使用零拷贝技术

零拷贝读取机制与传统资源读取机制的区别:

  • 传统方式:硬件–>内核–>用户空间–>程序空间–>程序内核空间–>网络套接字
  • 零拷贝方式:硬件–>内核–>程序内核空间–>网络套接字
sendfile on; # 开启零拷贝机制  
标签: nginx

本文转载自: https://blog.csdn.net/qq_43692950/article/details/128890318
版权归原作者 小毕超 所有, 如有侵权,请联系我们删除。

“Nginx 性能优化”的评论:

还没有评论