优化nginx的配置,做到合理高效的使用,让程序的跑的足够快,支持足够多的并发:
目标:
1.尽量提高但台机器的处理效率
2.尽量减少单台机器的负载
3.尽量减少磁盘的i/o
4.尽量减少网络的i/o
5.尽量减少内存的使用
6.尽量高效利用cpu的使用
怎么做?
1.nginx的模块用到啥,就装啥,在安装的时候加上
2.给nginx创建用户和组,单独设置权限,会更安全,例如:user nginx ngix
3.worker_processes:通常配置成cpu的总核数,或者其2倍,性能会更好,因为这样会减少进程间切换带来的消耗。
4.还可以同时使用worker_cpu_affinity来绑定cpu,使得每个worker进程独享cpu,实现完全开发,性能会更好,但是这个只对linux系统有效。
5.events里面的时间模型,linux推荐使用epoll模型,FreeBSD推荐采用kqueue。
6.worker_rlimit_nofile:描述一个nginx进程打开的最多的文件数目。配置成跟linux内核下文件打开数一致就行。可以通过ulimit -n 来查看,新装的系统默认是1021,centOS中可以如下方式进行修改:
在/etc/security/limits.conf最后增加:
*soft nofile 65535
*hard nofile 65535
*soft nproc 65535
*hard nproc 65535
改完后重启。
7.work_connection:每个进程允许的最多连接数,默认是1024,可以设置大一些。 理论上并发总数是worker_processes和worker_connections的乘积,worker_connections的值设置跟物理内存大小有关,因为系统可以打开的作答文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右,所以,worker_connections的值需要根据worker_processes进程数目和系统可以打开的最大文件总数进行适当的进行设置。
8.keepalive_timeout:设置到65左右就可以,默认是75。
9.client_header_buffer_size:设置请求的缓存,设置为4k,通常微系统分页大小的整数倍,可以通过 getconf PAGESIZE 来查看系统分页大小。
10.对打开的文件设置缓存
open_file_cashe max = 建议设置成和每个进程打开的最大文件数一致 inactive=60s
open_file_cashe_valid 90s ;
open_file_cashe_min_uses 2;
open_file_cashe_errors on;
11.尽量开启Gzip压缩,gzip_comp_level通常设置成3-5,高了浪费CPU
12.Error日志:生产环境要设成最高也就是crit,可以减少I/O
13.access日志优化:如果有其他统计软件,可以关闭日志,减少磁盘写,或者写入内存文件,提高I/O效率
14.sendfile 指令指定 nginx是否调用sendfile函数(zero copy 方式)输出文件,通常设置成on,如果是下载的应用磁盘IO重负载应用,可设置为off
15.buffers size 优化: 如果buffer size 太小就会导致nginx使用临时文件存储response,这回引起磁盘读写IO,流量越大问题越明显。
16.worker_priority 进程优先级设置:linux系统中,优先级搞得进程会占用更多的系统资源,这里配置的是进程的静态优先级,取值范围 -20到+19,-20级别最高。因此可以把这个设置小一点,但不建议比内核进程的值低(通常为-5)
17.合理设置静态资源的浏览器缓存时间,尽量使用浏览器缓存
18.负载均衡锁accept_mutex,建议开启,默认就是开启的
19.如果使用ssl的话,而且服务器上有ssl硬件加速设备的话,请开启硬件加速。
稍微整理一下,优化要根据具体实际的应用和服务器才有意义。。。。。。。。。。。。。。。。。。。。。。