阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

关于 nginx 内核优化

183次阅读
没有评论

共计 2242 个字符,预计需要花费 6 分钟才能阅读完成。

1)nginx 进程数,建议按照 cpu 数目来指定,一般跟 cpu 核数相同或为它的倍数。

worker_processes 8;

2)为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一个进程分配到多个 cpu。

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

3)下面这个指令是指当一个 nginx 进程打开的最多文件描述符数目,理论值应该是系统的最多打开文件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit - n 的值保持一致。

worker_rlimit_nofile 65535;

4)使用 epoll 的 I / O 模型,用这个模型来高效处理异步事件

use epoll;

5)每个进程允许的最多连接数,理论上每台 nginx 服务器的最大连接数为 worker_processes*worker_connections。

worker_connections 65535;

6)http 连接超时时间,默认是 60s,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!否则会导致许多无效的 http 连接占据着 nginx 的连接数,终 nginx 崩溃!

keepalive_timeout 60;

7)客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分页大小可以用命令 getconf PAGESIZE 取得。

client_header_buffer_size 4k;

8)下面这个参数将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。

open_file_cache max=102400 inactive=20s;

9)下面这个是指多长时间检查一次缓存的有效信息。

open_file_cache_valid 30s;

10)open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive 时间内一次没被使用,它将被移除。

open_file_cache_min_uses 1;

11)隐藏响应头中的有关操作系统和 web server(Nginx)版本号的信息,这样对于安全性是有好处的。

server_tokens off;

12)可以让 sendfile()发挥作用。sendfile()可以在磁盘和 TCP socket 之间互相拷贝数据 (或任意两个文件描述符)。Pre-sendfile 是传送数据之前在用户空间申请数据缓冲区。之后用 read() 将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到 OS 缓存。因为这种拷贝是在内核完成的,sendfile()要比组合 read()和 write()以及打开关闭丢弃缓冲更加有效(更多有关于 sendfile)。

sendfile on;

13)告诉 nginx 在一个数据包里发送所有头文件,而不一个接一个的发送。就是说数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。

tcp_nopush on;

14)告诉 nginx 不要缓存数据,而是一段一段的发送 – 当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。

tcp_nodelay on;

比如:

http {

server_tokens off;

sendfile on;

tcp_nopush on;

tcp_nodelay on;

……

}

15)客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。

client_header_buffer_size 4k;

客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。

分页大小可以用命令 getconf PAGESIZE 取得。

[root@test-huanqiu ~]# getconf PAGESIZE

4096

但也有 client_header_buffer_size 超过 4k 的情况,但是 client_header_buffer_size 该值必须设置为“系统分页大小”的整倍数。

16)为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。

open_file_cache max=65535 inactive=60s;

17)open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive 时间内一次没被使用,它将被移除。

open_file_cache_min_uses 1;

18)指定多长时间检查一次缓存的有效信息。

open_file_cache_valid 80s;

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2242字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中