nginx性能调优
参考:https://zhuanlan.zhihu.com/p/27288422 nginx调优相关的几个指令配置,参考上面的专栏的指令:
- worker_processes
- worker_connections
- Buffers
- Timeouts
- Gzip Compression
- Static File Caching
- logging
1,woker_processes
nginx开启多少个工作进程,一般设置成与cpu核心个数相匹配,如何查看cpu核心的个数?
cat /proc/cpuinfo |grep process
processor : 0
processor : 1
所以我的cpu是双核的,工作进程设置为2即可,设置成auto,nginx会自动检查设置成cpu的核心;
2,worker_connections
每个工作进程最多能同时处理的最大连接数,默认为512,但是大多服务器可以设置大的值,可以通过ab测试找到最合适的值,建议1024
3,buffer
buffer设置的有很多指令;包括fastcgi buffer,client buffer, proxy buffer;我们一般关注前两个buffer设置: client buffer相关指令
client_body_buffer_size 10K;
如果客户端请求body的大小大于client_body_buffer_size ,nginx会将消息体写入磁盘的临时文件,影响i/o性能,通常buffer设置为两个内存页大小,在32位系统上设置为8k,64位系统设置为16k
client_header_buffer_size 1k;
用来读取客户端的header头,一般情况下1k就够了,但是当cookie特别大,或者是来自wap客户端的请求,请求的消息头超过了ik,则nginx会使用large_client_header_buffers配置来分配内存
client_max_body_size 8m;
客户端请求的body所允许的最大值,如果超过这个值,会返回413错误
large_client_header_buffers 2 1k;
Nginx 使用 client_header_buffer_size 缓存客户端的请求头,一旦空间不够了,就通过 large_client_header_buffers 按需扩容。这样做可以平衡资源和性能。 比如说大部分请求头的大小在 2K 以内,小部分的请求头在 10K 左右,此时理论上我们可以通过调整 client_header_buffer_size 到 10K 来解决问题,不过这样的话无疑浪费了宝贵的内存,更好的方法是调整 client_header_buffer_size 到 2K 满足大部分请求头的需求,至于小部分 10K 的请求头,则通过调整 large_client_header_buffers 来满足。
fastcgi buffer指令
fastcgi_buffering on;
fastcgi_buffer_size 4k|8k;
fastcgi_buffers 8 4k|8k;
fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 8*4K+4K = 36k。 而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 2*4K 共 2 个 buffers。 当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。
4,time_out
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
fastcgi_send_timeout 15;
fastcgi_read_timeout 15;
fastcgi_connect_timeout 15;
5,Gzip
开启Gzip,gzip可以帮助Nginx减少大量的网络传输工作,另外要注意gzip_comp_level的设置,太高的话,Nginx服务会浪费CPU的执行周期。
6,Static File Caching
对所有的静态文件开启浏览器缓存,js,css,png/jpg
7,logging
access_log设置Nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快。 可以修改配置文件将该功能关闭:或者为日志开启gzip压缩或者buffer缓存,让多条日志一次写入磁盘,提高速度
access_log /spool/logs/nginx-access.log compression buffer=32k;
8,keep_alive
keepalive_requests 100
当一个keep-alive的连接超过这个数以后,连接将会关闭
keepalive_timeout 75s;
当一个持久连接超过75s以后,连接关闭