nginx优化指南(一)cpu相关
2020-04-08 本文已影响0人
mafa1993
nginx优化
- 增大nginx使用cpu的有效时长
- 使其能够使用全部cpu资源
- nginx进程间不争抢cpu资源(繁忙的worker进程不应让出,资源调度不应让出资源)
- 不和其他进程争抢资源(提升优先级使其占用cpu时间更长,减少操作系统上耗资源的非nginx进程)
- 阻塞api会导致主动让出cpu(程序处理尽量不进行阻塞)
- 业务场景产生的阻塞api(同步读网络报文)
- 同步:报文的发送和接受是同步进行的,发送后等待接受。 就是请求发送后需要等待响应
- worker进程数量设置
- 不能超过逻辑核数的4倍,一般设置为何逻辑核数一样即可
- 两核设置worker_processes 2;
- 减少进程上下文切换
- 主动切换的触发条件,sleep,资源调度阻塞等
- 被动切换,时间片耗尽(静态优先级,nice,top命令中的NI列,值为-20到19,动态优先级,top中的PR列,越低时间片越长)
- worker_priority 0; main模块设置优先级
- 绑定cpu,多核cpu进程切换后,如果改变了运行cpu的核,会导致一些缓存丢失,绑定后利用固定的cpu响应用户请求,可以利用缓存(时间片轮训导致运行的cpu核改变)
- worker_cpu_affinity auto/cpumask; main模块 auto为自动绑定cpu和进程,cpumask是cpu掩码,手工配置,有几个nginx进程,写几个worker_cpu_affinity 0001 0010; #4核两个进程 绑定不同的cpu
- 连接数
- io模型选择
- use epoll; use event,events模块,配置需要使用什么事件模型,不需要配置,会自动选择一个最优的
- 单个worker允许连接的数量
- worker_connections number; number的计算方式 一个connection大约232个字节,event约有96个字节,一个连接共占用大约232+96*2(读写两个事件)B内存左右
- worker进程最大打开文件数
- 文件数会限制连接数,此参数收最大文件句柄数限制,超过了最大句柄数限制,就会报 too many open file错误,大并发时可能句柄不够用
- worker_rlimit_nofile number; events模块设置
- cat /proc/sys/fs/file-max 内核最大的文件数(默认是内存百分之10可打开的数量)
- 单个进程可分配的最大文件数 cat /proc/sys/fs/nr_open 单个进程的不能超过内核的
- 修改用户的文件句柄数
- ulimt -n 查看用户的最大句柄数
- ulimit -HSn 1000 修改,临时修改,-H为硬限制,-S是软限制
- /etc/security/limits.conf 永久修改,对用户进行设置
- nofile中的 hard limit不能超过单个进程的数量,如果超过了,无法建立新的连接,xshell新窗口都打不开
- 文件描述符设置:
- io模型选择
a.所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max ,内核的文件描述符数
b.单个进程打开的文件描述符数不能超过user limit中nofile的soft limit,进程打开的数量受用户的限制,但是设置的时候必须要设置的比用户的大,进程的设置要比用户大,用户操作也需要一个文件操作描述符
c.nofile的soft limit不能超过其hard limit
d. nofile的hard limit不能超过/proc/sys/fs/nr_open,进程必须大于用户的