nginx的配置和调优

2019-02-21  本文已影响0人  划船不用桨top

优化nginx worker 进程数:

Nginx 有 master 和 worker 两种进程,master 进程用于管理 worker 进程,worker 进程用于 Nginx 服务 .

worker 进程数默认为 1 。

worker_processes  1;

worker 进程数应该设置为服务器 CPU 的核数。

[root@localhost ~]# grep -c processor /proc/cpuinfo         # 查看CPU核数
2
 
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf    # 设置worker进程数
worker_processes  2;

worker_processes 这个参数最好是设置成 auto 自动匹配进程数。


绑定 Nginx 进程到不同的 CPU 上

默认情况下,Nginx 的多个进程有可能跑在某一个 CPU 或 CPU 的某一核上,导致 Nginx 进程使用硬件的资源不均,因此绑定 Nginx 进程到不同的 CPU 上是为了充分利用硬件的多 CPU 多核资源。

[root@localhost ~]# grep -c processor /proc/cpuinfo    # 查看CPU核数
2
worker_processes  2;         # 2核CPU的配置
worker_cpu_affinity 01 10;
 
worker_processes  4;         # 4核CPU的配置
worker_cpu_affinity 0001 0010 0100 1000;   
 
worker_processes  8;         # 8核CPU的配置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000;
 
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

优化 Nginx 单个进程允许的最大连接数

控制 Nginx 单个进程允许的最大连接数的参数为 worker_connections ,这个参数要根据服务器性能和内存使用量来调整。

进程的最大连接数受 Linux 系统进程打开的最大文件数的限制,只有执行了 "ulimit -HSn 65535" 之后,worker_connections 才能生效。

连接数包括代理服务器的连接、客户端的连接等,Nginx 总并发连接数 = worker_processes * worker_connections。总数保持在 3w 左右即可。

worker_processes  2;
worker_cpu_affinity 01 10;
user nginx nginx;
events {
    use epoll;
    worker_connections  15000;
}

优化 Nginx worker 进程打开的最大文件数


worker_rlimit_nofile 65535;    # worker 进程打开的最大文件数,可设置为优化后的 ulimit -HSn 的结果


开启高效文件传输模式

sendfile 参数用于开启文件的高效传输模式,该参数实际上是激活了 sendfile() 功能。

sendfile() 是作用于两个文件描述符之间的数据拷贝函数,这个拷贝操作是在内核之中的,被称为 "零拷贝" 。sendfile 比 read 和 write 函数要高效得多,因为 read 和 write 函数要把数据拷贝到应用层再进行操作。

tcp_nopush 参数用于激活 Linux 上的 TCP_CORK socket 选项,此选项仅仅当开启 sendfile 时才生效,tcp_nopush 参数可以把 http response header 和文件的开始部分放在一个文件里发布,以减少网络报文段的数量。


http {
   include       mime.types;
   default_type  application/octet-stream;
   
   sendfile      on;    # 开启文件的高效传输模式
   tcp_nopush    on;    # 激活 TCP_CORK socket 选择
   tcp_nodelay   on;    # 数据在传输的过程中不进缓存
       
   keepalive_timeout  65;
   include vhosts/*.conf;
}

作者:lamp_yang_3533
来源:CSDN
原文:https://blog.csdn.net/lamp_yang_3533/article/details/80383039
版权声明:本文为博主原创文章,转载请附上博文链接!

上一篇 下一篇

猜你喜欢

热点阅读