描述nginx中worker_processes、worker_cpu_affinity、worker_rlimit_nofile、worker_connections配置项的含义
nginx 配置文件格式说明
- 配置文件由指令与指令块构成
- 每条指令以;分号结尾,指令与值之间以空格符号分隔
- 可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
- 指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
- include语句允许组合多个配置文件以提升可维护性
- 使用#符号添加注释,提高可读性
- 使用$符号使用变量
- 部分指令的参数支持正则表达式
1.worker_processes
启动Nginx工作进程的数量,一般设为和CPU核心数相同,auto:自动检测,设置为当前主机cpu的核心数
worker_processes [number | auto];
[root@centos7 ~]#ps aux|grep nginx
root 1301 0.0 0.0 46344 2020 ? Ss 18:52 0:00 nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
nginx 2011 0.0 0.1 46772 2276 ? S 21:21 0:00 nginx: worker process
root 2211 0.0 0.0 112808 968 pts/1 S+ 22:54 0:00 grep --color=auto nginx
#将工作进程的数量设置为2个
[root@centos7 ~]#vim /apps/nginx/conf/nginx.conf
worker_processes 2;
[root@centos7 ~]#nginx -s reload
[root@centos7 ~]#ps aux|grep nginx
root 1301 0.0 0.1 46232 2060 ? Ss 18:52 0:00 nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
nginx 2241 0.0 0.0 46652 1932 ? S 23:02 0:00 nginx: worker process
nginx 2242 0.0 0.0 46652 1932 ? S 23:02 0:00 nginx: worker process
root 2244 0.0 0.0 112808 968 pts/1 S+ 23:02 0:00 grep --color=auto nginx
2.worker_cpu_affinity
将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto;
CPU MASK: 00000001:0号CPU
00000010:1号CPU
10000000:7号CPU
[root@centos7 ~]#ps axo pid,cmd,psr |grep nginx
1301 nginx: master process /apps 1
2241 nginx: worker process 0
2242 nginx: worker process 0
2340 grep --color=auto nginx 1
#将第一个工作进程绑定到 CPU0,将第二个工作进程绑定到 CPU1
[root@centos7 ~]#vim /apps/nginx/conf/nginx.conf
worker_processes 2;
worker_cpu_affinity 01 10;
[root@centos7 ~]#nginx -s reload
[root@centos7 ~]#ps axo pid,cmd,psr |grep nginx
1274 nginx: master process /apps 0
2029 nginx: worker process 0
2030 nginx: worker process 1
2036 grep --color=auto nginx 1
3.worker_rlimit_nofile
所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制。最好与ulimit -n 或者limits.conf的值保持一致。用于在不重新启动主进程的情况下增加限制。
#设置工作进程的最大打开文件数为65536
[root@centos7 ~]#vim /apps/nginx/conf/nginx.conf
worker_rlimit_nofile 65536;
[root@centos7 ~]#ulimit -n 100000
[root@centos7 ~]#ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7835
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 100000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7835
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
#修改PAM资源限制
[root@centos7 ~]#vim /etc/security/limits.conf
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
* hard msgqueue 8192000
#重启生效
[root@centos7 ~]#reboot
[root@centos7 ~]#ulimit -n
1000000
[root@centos7 ~]#ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7835
max locked memory (kbytes, -l) 32000
max memory size (kbytes, -m) unlimited
open files (-n) 1000000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 8192000
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1000000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
4.worker_connections
设置单个工作进程可以同时打开的最大连接数。这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑是实际同时连接数不能超过当前最大打开文件数限制,可以通过 worker_rlimit_nofile更改。
- 作为web服务器的时候最大并发数为:worker_connections * worker_processes
- 作为反向代理的时候为:(worker_connections * worker_processes)/2
[root@centos7 ~]#vim /apps/nginx/conf/nginx.conf
events {
worker_connections 10240;
accept_mutex on;
multi_accept on;
}
[root@centos7 ~]#nginx -s reload
5、Nginx性能优化建议
Syntax:accept_mutex on | off;
Default:accept_mutex off;
Context:events
#建议设置为accept_mutex on;
如果accept_mutex启用,工作进程将依次接受新连接,默认为off。否则,将通知所有工作进程有关新连接的信息,如果新连接量较低,则某些工作进程可能只是浪费系统资源,在高并发场景下,建议设置为on。
Syntax:multi_accept on | off;
Default:multi_accept off;
Context:events
#建议设置为multi_accept on;
如果multi_accept禁用,工作进程将一次接受一个新连接,默认为off。开启后,工作进程将一次接受所有新连接。建议设置为on