首页 > 代码库 > tengine 的优化
tengine 的优化
查服务器CPU的核数 :
[root@c01 conf]# grep processor /proc/cpuinfo |wc -l 4
[root@c01 conf]# grep -c processor /proc/cpuinfo 4
淘宝维护的nginx分支Tengine可以使用auto命令自动配置worker_processes和worker_cpu_affinity。
[root@c01 conf]# grep worker_processes nginx.conf worker_processes auto;
查看worker进程数量:
[root@c01 conf]# ps aux|grep nginx|grep -v ‘grep‘ root 1510 0.0 0.5 26464 5532 ? Ss 10:29 0:00 nginx: master process /apps/tengine-2.1.0/sbin/nginx www 1693 0.0 2.9 55136 29920 ? S 11:04 0:00 nginx: worker process www 1694 0.0 2.9 55136 29632 ? S 11:04 0:00 nginx: worker process www 1695 0.0 2.9 55136 29632 ? S 11:04 0:00 nginx: worker process www 1696 0.0 2.9 55136 29632 ? S 11:04 0:00 nginx: worker process
从"worker_processes auto"可以看出,NGINX会跟具CPU的核数自动分配进程数,由于服务器的CPU是4核的,所以WORKER的数量为4.NGINX MASTER主进程不包含在这个参数内,NGINX MASTER的主进程为管理进程负责调度和管理WORKER进程.
有关worker_processes定义的work进程数量,建义设置 为CPU的核数或CPU核数的2倍(还根硬盘存储的数据用系统的负载有关)
优化绑定不同的NGINX进程到不同的CPU上:
默认情况下,NGINX的多个进程有可能运行在某一个CPU或CPU的某一核 上,导至进程使用硬件的资源不均,本节的优化将尽可能地将不同的NGINX的进程分配给不同的进程里,达到充分有效利用硬件的多CPU多核资源的目的.
如下:
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
#worker_cpu_affinity就是配置 NGINX进程与CPU亲和力的参数,即把不同的进程分给不同的CPU处理.这里0001 0010 0100 1000是掩码,分别代表第1,2,3,4核CPU,由于WORKER_PROCESSES进程数为4,因此,上述配置 会为每个进程分配一核 CPU处理,默认情况下进程不会绑定任何CPU,参数位置 为MAIN段.
八核 CPU服务器的参数配置 参配置 参考如下:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;
work_cpu_affinity的作用是绑定不同的worker进程数到一组CPU上.通过设置bimask控制进程允许使用的CPU,默认worker进程不会绑定到任何CPU上.
调整nginx单个进程允许的客户最大连接数:
events { use epoll; worker_connections 51200; } #worker_connections 是一个事件模块指令,用于定义nginx每个进程的最大连接数,默认是1024.最大客户连接数由worker_processes和worker_connections决定,限max_client=worker _processes*work_connections. 进程的最大连接数受linux系统进程的最大打开文件数限制,在执行操作系统命令"ulimit -HSn 51200"或配置 相应文件后,worker_connections的设置才能生效.
配置 nginx worker进程的最大打开文件数:
worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; } #nginx worker进程的最大打开文件数,这个控制连接数的参数为worker_rlimit_nofile. 最大打开文件数,可设置 为系统优化后的ulimit -HSn的接果 ulimit 一些参数的说明: -H:设定资源的硬性限制,也就是管理员所设下的限制 -S:设定资源的弹性 限制 -n:指定同一时间最多可开启的文件数
优化服务器域名的散列表大小:
先要将确切名字和通配符名字存储在散列表中.散列表与监听端口关联,每个端口最多关联到三张表:确切名字的散列表,以星号起始的通配符名字 的散列表和以星号结束的通配符名字的散列表.散列表的尺寸在配置阶段进行优化,可以最小的CPU缓存命中失败来打到名子.NGINX首先会搜索确 切的名字的列表;如果没有找到,则搜索以星号起启的通配符名字的散列表;如果还没有找到,则继续搜索以星号结束的通配符名字的散列表.因为名按照域名的字>节来搜索的,所以搜索通配符名字的散列表比搜索确切名字的散列表慢. 注意: nginx.org存储在通配符名字的散列表中,而不在确切名字的散列表中.由于正则表达式是逐个进行串行测试的,因些该方式也是最慢的,而且不可扩展. 所以尽可能地使用确切的名字: 如: server { listen 80; server_name nginx.org www.nginx.org *.nginx.org; ... } 下面这种方法更简单,但是效率也更低: server { listen 80; server_name .nginx.org; ... }
如果定义大量的名字,或者定义了非常长的名字,那就需要在http配置块中整:
server_names_hash_max_size 256; server_names_hash_bucket_size 64; #每一个多个域名的长度最大值,第二个单个域名的最大值(未能复现问题,以后再求证)
开启高效文件传输模式:
sendfile参数用于开启文件的高效传输模式.同时将tcp_nopush 和tcp_nodelay两个指令设置 为on,可以防止网络和磁盘I/O阻塞,提升Nginx工作效率.
sendfile on; tcp_nodelay on; tcp_nopush on;
tcp_nodelay:默认情况下当数据发送时,内核并不会骊上发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O性能.但是,在每次只发送很少字节的务业场景中,使用tcp_nodelay功能,等待时间会比较长.
tengine 的优化