Nginx性能优化配置(三)

Nginx性能优化配置(三)

 本文主要介绍Nginx的性能优化配置,文章的层次架构如图所示。

1.Nginx的工作进程优化

1.worker_processes

作用:worker进程的数量;通常应该等于小于当前主机的cpu的物理核心数;auto表示根据CPU的物理核心数自动调整工作进程数。使用lscpu或或者cat /proc/cpuinfo | grep ‘processor‘ | wc -l 可以查看CPU的物理核心数。

配置:worker_processes auto;

配置段:main

2.worker_cpu_affinity cpumask

作用:使用这个指令可以绑定到具体那颗CPU。如果你有4颗CPU,可以这么配置

配置:worker_processes    4;

worker_cpu_affinity 0001 0010 0100 1000;

配置段:main

3.worker_priority number;

作用:指定worker进程的nice值,设定worker进程优先级;[-20,20]

配置: worker_priority 0;

配置段:main

4.worker_rlimit_nofile number;

作用:worker进程所能够打开的文件数量上限;

配置:worker_rlimit_nofile 20960;

配置段:main

5.accept_mutex

作用:如果你有多个workers,那么还要配置影响worker的相关指令。accept_mutex指令将使进程worker逐个接受新连接。默认为on,如果为off会导致惊群现象,即每秒重复多次连接,产生过多的上下文切换,降低服务器的性能。

配置:accept_mutex on;

配置段:events

6.accept_mutex_delay

作用:acceppet_mutex开启时才有效,这表示只有一个互斥的worker进程接受连接,其他的在延迟世间内轮流等待新的连接。

配置: accept_mutex_delay 500ms;

配置段:events

7.worker_connections

作用:指明worker进程的最大连接数。

配置:worker_connections 10240;

配置段:events

8.multi_accept

作用:worker进程是否同时接受连接所有新请求。默认为off,表示一次只接受一个新的请求。

配置:multi_accept off;

配置段:events

2.I/O优化

1.Sendfile

作用:数据直接在内核空间完成文件描述符之间的复制而不经由应用层,这使得操作系统资源的利用率提高。

配置:sendifile on;

配置段:http,server和location代码块

2.直接I/O(directio)

作用:操作系统内核通常尝试优化和缓存任何读/写请求,但是对于一些较大的数据或者说缓存命中率较差的数据,我们却不期望缓存在高速缓存中,我们应该按需加载。直接I/O就提供这么一个功能,它让应用数据直接从磁盘中进行I/O请求。这样一来能够更好地利用CPU周期和提高缓存命中率。

配置:directio 4m; #任何大于4m的文件将由直接I/O加载。

directio_alignment 512; #设置数据传输的块大小。

配置段:http,server和location代码块

3.异步I/O()

作用:异步I/O允许进程进行不受阻塞或者不需要等待I/O完成的I/O操作。

配置:aio off;#按需配置,在linux上需要启动direction

配置段:http,server和location代码块

3.TCP优化

http使用tcp传输数据,数据以tcp分组的形式传递。Nginx提供了改变底层TCP栈行为的指令,这些属性能够更改单个套接字连接的属性。

1.TCP_NODELAY

作用:TCP/IP传输时存在大量的小包问题。启用这个指令表示在keepalived模式中不缓存,不延迟小文件而把小文件快速发出去。

配置: tcp_nodelay on;

配置段:http,server和location代码块

2.TCP_CORK

作用:它不把小文件发出去,而是打包发出去。

配置:tcp_nopush off;

配置段:http,server和location代码块

4.buffer优化

在接受请求时,nginx提供可可以将请求数据写入请求缓存区的功能。这些缓存区的数据可以作为Nginx的变量使用。缓存区大小与请求的数据大小相比,若小于请求的数据,则将数据写入磁盘文件中。

1.client_body_buffer_size

作用:此指令设置请求主体的缓冲区大小。 如果主体超过缓冲区大小,则完整主体或其一部分将写入临时文件。

配置:client_body_buffer_size 16k;

配置段:http,server和location代码块

2.client_max_body_size

作用:此指令设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413(Request Entity too large)错误。

配置: client_max_body_size 2m;

配置段:http,server和location代码块

3.client_body_in_file_only

作用:此指令禁用NGINX缓冲区并将请求体存储在临时文件中。

配置:client_body_in_file_only off;

配置段:http,server和location代码块

4.client_body_in_single_buffer

作用:该指令设置NGINX将完整的请求主体存储在单个缓冲区中。默认off,启用能够优化读取$request_body变量涉及的I/O操作。

配置:client_body_in_single_buffer off;

配置段:http,server和location代码块

5.client_header_buffer_size

作用:它为请求头分配一个缓冲区。 如果请求头大小大于指定的缓冲区,则使用large_client_header_buffers指令分配更大的缓冲区。

配置:client_header_buffer_size 1m;

配置段:http, server

6.large_client_header_buffers

作用:此指令规定了用于读取大型客户端请求头的缓冲区的最大数量和大小。当在默认的缓存区不足时按需分配,如果请求转入长连接则释放缓存区。

配置: large_client_header_buffers 4 8k;

配置段:http, server

5.静态内容缓存优化

使用open_file_cache进一步提高性能, NGINX缓存将最近使用的文件描述符和相关元数据(如修改时间,大小等)存储在缓存中。 缓存不会存储所请求文件的内容。

1.open_file_cache

作用:缓存文件描述符的元数据,如大小,修改时间,权限等等。缓存清理使用LRU算法。

配置:open_file_cache max=1000 inactive=20s;

配置段:http,server和location代码块

2.open_file_cache_valid

作用:检验缓存中元素有效性的频率;默认为60s。

配置:open_file_cache_valid 30s;

配置段:http,server和location代码块

3.open_file_cache_min_uses

作用:NGINX将在非活动时间段之后从高速缓存中清除元素。在非活动时长访问的次数超过了指定次数,则不淘汰;否则淘汰。

配置:open_file_cache_min_uses 4;

配置段:http,server和location代码块

4.open_file_cache_errors

作用:NGINX可以缓存在文件访问期间发生的错误。

配置: open_file_cache_errors off;

配置段:http,server和location代码块

6.FastCGI缓存优化

1.启用缓存fastcgi_cache_path

作用:定义fastcgi的缓存;缓存位置为磁盘上的文件系统,由path所指定路径来定义。levels=levels:指定缓存目录的层级数量,以及每一级的目录数量。keys_zone=name:size,指定k/v映射的内存空间的名称及大小。inactive=time,指定非活动时长。max_size=size,磁盘上用于缓存数据的缓存空间上限。

配置:fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

fastcgi_cache_key $request_method://$host$request_uri;

配置段:http,server和location代码块

2.fastcgi_cache

作用:调用指定的缓存空间来缓存数据

配置:fastcgi_cache off;

配置段;http,server和location代码块

3.fastcgi_cache_key string;

作用:定义缓存项的key的字符串。

配置:fastcgi_cache_key localhost:9000$request_uri;

配置段;http,server和location代码块

4.fastcgi_cache_methods

作用:为哪些请求方法使用缓存。

配置:fastcgi_cache_methods GET HEAD;

配置段;http,server和location代码块

5.fastcgi_cache_min_uses

作用:缓存空间中的缓存项在非活动时间内至少要被访问到此处所指定的次数方可被认作活动项;

配置:fastcgi_cache_min_uses 4;

配置段;http,server和location代码块

6.fastcgi_cache_valid

作用:指定缓存的响应码和各自的缓存时长。

配置:fastcgi_cache_valid 200 302 10m;

配置段:http,server和location代码块

7.fastcgi_keep_conn

作用:指定FastCGI服务是否开启长连接。默认为off。

配置:fastcgi_keep_conn off;

配置段:http,server和location代码块

8.FastCGI缓存示例

示例:

http {
    ...
    fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
    ...
    server {
    ...
        location ~* \.php$ {
    ...
            fastcgi_cache fcgi;
            fastcgi_cache_key $request_uri;
            fastcgi_cache_valid 200 302 10m;
            fastcgi_cache_valid 301 1h;
            fastcgi_cache_valid any 1m;
    ...
        }
    ...
    }
    ...
}

7.proxy缓存优化

1.proxy_pass

作用:指明代理的路径

配置:proxy_pass http://localhost:8000/uri/;

配置段:location, if in location, limit_except

2. proxy_set_header

作用:设定发往后端主机的请求报文的请求首部的值。

配置:proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;

配置段:http,server和location代码块

3.proxy_cache_path

作用:设置缓存的路径以及其他的相关属性

配置:proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

配置段:http

4. proxy_cache

作用:调用的缓存的名称,或禁用缓存;

配置:proxy_cache off;

配置段:http,server和location代码块

5.proxy_cache_key

作用:缓存条目的键

配置:proxy_cache_key "$host$request_uri $cookie_user";

配置段:http,server和location代码块

6. proxy_cache_valid

作用:定义各类响应码的缓存时长;

配置:proxy_cache_valid 200 302 10m;

配置段;http,server和location代码块

8.memcached缓存优化

Memcache是一个通用的内存缓存系统,通常用于web加速。nginx提供许多memcached的指令,从而使得可以直接访问memcached提供的内容,避免对上游服务器的影响。

$memcached_key变量,用于执行高速缓存查找。如果要使用Memcached进行查找操作,必须给$memcached_key设置一个值,该值根据URL确定。

1.memcached_pas

作用:此指令用于指定memcached服务器的位置。可以使用三种方式指定:(1)域名或IP,以及可选端口(2)unix套接字(3)upstream创建的一组服务器

配置:set $memached_key $uri;

memcached_pass localhost:11211;

配置段:location, if in location

2.memcached_connect_timeout

作用:指定连接超时时长

配置:memcached_connect_timeout 30s;

配置段:http,server和location代码块

3.memcached_ send_timeout

作用:指定请求写入memcached服务器的超时时长

配置:.memcached_ send_timeout 30s;

配置段:http,server和location代码块

4.memcached_read_timeout

作用:指定从memcached服务器读取响应的超时超时。

配置:memcached_read_timeout 30s;

配置段;http,server和location代码块

5.memcached_bind

作用:将服务器的IP与memcached服务器绑定。默认为关闭,但会自动为服务器自动选择一台服务器的IP连接memcached。

 示例:
   server{
       location /python/css/ {
           alias "/code/location/css/";
       }
       location /python/ {
           set $memcached_key "$request_method$request_uri";
           charset utf-8;
           memcached_pass 127.0.0.1:11211;
           error_page 404 502 504 = @pythonfallback;
           default_type text/html;
       }
       location @pythonfallback {
           rewrite ^/python/(.*) /$1 break;
     
           proxy_pass http://127.0.0.1:5000;
           proxy_set_header X-Cache-Key "$request_method$request_uri";
       }
       # Rest NGINX configuration omitted for brevity
}
时间: 2024-10-10 09:03:40

Nginx性能优化配置(三)的相关文章

nginx + SSL优化配置

nginx + SSL优化配置: 1 #http段添加如下配置项: 2 3 http { 4 5 ssl_prefer_server_ciphers on; #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件. 6 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #协议安全设置 7 ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #加密套件 ssl_ciph

C++应用程序性能优化(三)——C++语言特性性能分析

C++应用程序性能优化(三)--C++语言特性性能分析 一.C++语言特性性能分析简介 通常大多数开发人员认为,汇编语言和C语言比较适合编写对性能要求非常高的程序,C++语言主要适用于编写复杂度非常高但性能要求并不是很高的程序.因为大多数开发人员认为,C++语言设计时因为考虑到支持多种编程模式(如面向对象编程和范型编程)以及异常处理等,从而引入了太多新的语言特性.新的语言特性往往使得C++编译器在编译程序时插入了很多额外的代码,会导致最终生成的二进制代码体积膨胀,而且执行速度下降.但事实并非如此

Nginx 性能优化

1.安全优化:隐藏Nginx版本号,server_tokens off; 2.安全优化:更改掉默认的用户  user nginx; 3.性能优化:  根据硬件配置,调整nginx worker 进程数 ,一般为cpu的核数 4.性能优化:绑定不同的进程到不同的cpu上,硬件资源平均分配,比如4个worker进程数,即work_cpu_affinity 0001 0010 面试题:命令行如何通过调整命令来调整不同的进程或服务到不同的cpu上,资源平均分配 5.性能优化:nginx的事件处理模型优化

Tengine/Nginx性能优化及杂谈

谷歌.度娘搜索Nginx优化,能搜索出很多的文章,动不动就几万并发,十万并发,看着好像真是那么回事似的. 从使用Tengine的过程中,对Tengine/Nginx的优化,我个人认为Tengine的优化是脱离不开使用它的环境及部署结构的,单说优化 Tengine的意义并不大,况且每家公司的业务各不相同,所以优化不是简单的事情.即便如此,我总结了下,从以下几个方便入手浅谈下 Tengine/Nginx的性能优化.本文以Tengine为主,Nginx大部分都适用. 1.网络 带宽 一个需要支持1万并

MySQL影响性能的因素原因以及性能优化配置详解

(https://blog.csdn.net/kangshuo2471781030/article/details/79315577) 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 不合理需求造成资源投入产出比过低,这里我们就用一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计,附加要求:实时更新 从功能上来看非常容易实现,执行一条SELECT COUNT(*) from 表名的Query 就可以得到结果.但是,如果我们采用不是MyISAM 存储引擎,而是使用的In

性能优化系列三:JVM优化1

一.几个基本概念 GCRoots对象都有哪些 所有正在运行的线程的栈上的引用变量.所有的全局变量.所有ClassLoader... 1.System Class.2.JNI Local3.JNI Global4.Thread Block5.Busy Monitor6.Java Local7.Native Stack8.Unfinalized9.Unreachable10.Java Stack Frame11.Unknown 栈帧的解释 Java虚拟机栈(Java Virtual Machine

nginx性能优化技巧

前几天买了本高俊峰的<高性能Linux服务器构建实战I>,网上都说运维必备手册,昨天看了目录加小50页感觉还是比较扩充视野的,很多东西在学校是不可能学到的,就是感觉有的地方讲的仍然不是很清楚,毕竟79块的书其实可以写到800页的.... 个人对于nginx比较感兴趣,源码的编译安装是比较熟的了,配置文件本来以为挺熟的,但是看了书上配置文件的N多命令我感觉根本玩不起来.因为实在是太多了,要背根本不现实,就算背下来不去用也会很快就忘掉.十分蛋疼~~ 书上对于Nginx的性能优化写了4种方法,下面分

MySQL性能优化(三)表结构优化

一.选择合适的数据类型 1.使用可以存下你的数据的最小的数据类型.2.使用简单的数据类型.int要比varchar类型在mysql处理上更简单.3.尽可能的使用not null定义字段.4.尽量少用text类型,非用不可时最好考虑分表.*使用int来存储日志时间,利用FROM_UNIXTINE()(得到日期),UNIX_TIMESTAMP()(得到时间戳)两个函数来进行转换*使用bigint来存ip地址,利用INET_ATON(),INET_NTOA()两个函数来进行转换 二.表的范式和反范式化

nginx性能优化调优之google-perftools

什么是google-perftools?google-perftools是google公司开发的一款针对 C/C++ 程序的性能分析开源工具,使用该工具可以对 CPU 时间片.内存等系统资源的分配和使用进行分析google-perftools包含四个工具,分别是:TCMalloc.heap-checker.heap-profiler和cpu-profiler,其中我们本次需要的一个工具TCMalloc是google-perftools的其中一个工具,用于优化内存分配的效率和速度,帮助在高并发的情