Nginx优化实战--参数优化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wh2691259/article/details/72873167

1.优化Nginx服务的worker进程个数

在nginx.conf配置中有worker_processes.优化策略,worker_processes参数大小的设置可以等于CPU核数。高并发场合也可以考虑提高至CPU核数*2

#该参数调整的是nginx服务的worker进程数,Nginx有Master进程和worker进程之分,Master为管理进程,真正接待"顾客"的是worker进程

worker_processed 1; <== 指定了nginx要开启的进程数,结尾的数字就是进程的个数

小知识点:查看Linux服务器CPU硬件资源信息。如 4cpu32核,一般就是4个cpu,32个处理器

#查看CPU总核数(逻辑数目)
[root@vultr ~]# grep processor /proc/cpuinfo
processor   : 0
# 配置里是cpu逻辑数目(从0开始)

#查看CPU总颗数
[root@vultr ~]# grep 'physical id' /proc/cpuinfo
physical id : 0
# 配置的是物理地址,即cpu物理数目(从0开始)

#可以通过执行top命令,然后按数字1,即可现实所有的CPU核数
[root@vultr ~]# top
top - 14:31:42 up 74 days, 7 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  67 total,   1 running,  66 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016396 total,   182272 free,   278292 used,   555832 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   512028 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  445 root      20   0  553156  16100   3420 S  0.3  1.6  16:01.90 tuned
    1 root      20   0  125048   3232   2088 S  0.0  0.3   6:02.34 systemd

如果是4cpu32核, 建议配置成32

worker_processes   32;

2.Nginx事件处理模型优化

Nginx的链接处理机制在不同的操作系统中会采用不同的I/O模型,在Linux下,Nginx使用epoll的I/O多路复用模型,在Freebsd中使用kqueue的I/O多路复用模型,在Solaris中使用/dev/poll方式的I/O多路复用模型,在Windows中使用的是icop。

events
{
    use epoll; #events指令是设定Nginx的工作模式以及连接数上限
    #参数有select,poll,kqueue,epoll,rtsig,、dev/poll,其中select/poll是标准的工作模式
}

3.调整Nginx单个进程允许的客户端最大连接数

最大连接数worker_connections同样也在nginx.conf中的event中。worker_connections的值要根据具体服务器性能和程序的内存使用量来指定(一个进程启动使用的内存根据程序确定),如下:

events
{
    worker_connections 1024; 
    # 这也是个事件模块指令,用于定义nginx每一个进程的最大连接数,默认是1024.最大客户端连接数是woker_processes*worker_connections。进程的最大连接数受Linux系统进程的最大文件数限制,在执行命令"ulimit -HSn 65535"或配置对应的文件后,这里的woker_connections的设置才生效
}

4.配置Nginx worker进程最大打开文件数

woker_rlimit_nofile  65535; #在最外层配置和worker_processes 一个层级

5.开启高效文件传输模式

sendfile参数用户开启文件的高效传输模式。同时将tcp_nopushtcp_nodelay两个指令设置为on,可防止网络及磁盘I/O阻塞,提升nginx工作效率。

#可以再http、location中定义
http
{
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}
  1. sendfile 可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。
  2. tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。
  3. tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。

猜你喜欢

转载自blog.csdn.net/wh2691259/article/details/72873167