nginx的性能优化
全局中修改
一、按内核核数修改CPU进程
vim /apps/nginx/conf/nginx.conf
worker_processes auto;
这里编译安装不是按照核数来的,yum安装配置文件默认是auto
二、进程绑定CPU,利用缓存提高运行效率
1、修改配置
vim /etc/nginx/nginx.conf
2、添加CPU亲缘性
worker_cpu_affinity 00000000 00000000 00000000 00000000;
(这里八核CPU就写8个0 ,4个线程就写4次8个0,我这里只开了4个线程)
3、绑定CPU
worker_cpu_affinity 00000001 00000010 00000100 00001000;
(这里表示,第一个线程绑定在第一个和,第二个线程绑定在第二个核,以此类推,1在第几位则表示绑定在第几个核上)
4、由于只用四核cpu可以省略前面四个0
worker_cpu_affinity 0001 0010 0100 1000;
5、查看nginx进程绑定在哪个CPU上
ps axo pid,cmd,psr |grep nginx 2293 nginx: master process nginx 7 2772 nginx: worker process 0 2773 nginx: worker process 1 2774 nginx: worker process 2 2775 nginx: worker process 3 2896 grep --color=auto nginx 1
三、修改优先级,将nginx的优先级调到最高(官方nice值-20-20实际nice值-20-19,nice值最大19,设置100也是19)
1、查看目前优先级
ps axo pid,cmd,nice |grep nginx 2293 nginx: master process nginx 0 2772 nginx: worker process 0 2773 nginx: worker process 0 2774 nginx: worker process 0 2775 nginx: worker process 0 3145 grep --color=auto nginx 0
2、调整优先级为nice最高值-20
worker_priority -20;
3、重读服务
nginx -s reload
4、查看当前优先级
ps axo pid,cmd,nice |grep nginx 2293 nginx: master process nginx 0 3288 nginx: worker process -20 3289 nginx: worker process -20 3290 nginx: worker process -20 3291 nginx: worker process -20 3325 grep --color=auto nginx 0
四、修改所有worker进程能打开的文件数量上限,(最好与ulimit -n 的值保持一致,如65535)
1、查看默认ulimit 值
ulimit -n 1024
2、临时修改ulimit值
ulimit -n 1025
3、永久修改ulimit值
vim /etc/security/limits.conf
4、添加这两行
* soft nofile 65535 * hard nofile 65535
5、在nginx 的配置文件中添加值
vim /etc/nginx/nginx.conf worker_rlimit_nofile 65535;
ulimit值按实际硬件设置,设置过大会加重负载
以上的都是在全局中修改的,只需要nginx -s reload 重读服务即可,不需要重启服务
events中修改
一、修改请求的方式
accept_mutex on ;
处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能,默认值为off,可优化为on
二、修改worker进程接受数
multi_accept on;
此指令默认为off,即默认为一个worker进程只能一次接受一个新的网络连接, on表示每个woker进程可以同时接受所有新的网络连接,修改为on可以提高并发量
http中修改
一、不延迟发送,多个包才确认一次
tcp_nodelay on ;
在keepalived模式下的连接是否启用TCP_NODELAY选项,即Nagle算法
当为off时,延迟发送,每发送一个包就需要确认ACK,才发送下一个包
默认On时,不延迟发送,多个包才确认一次
可用于:http, server, location
二、在开启sendfile,on时合并响应头和数据体在一个包中一起发送
tcp_nopush on ;
三、是否启用sendfile功能,在内核中封装报文直接发送,默认Off
sendfile on ;