支持高并发Web服务器搭建(3)

net.core.netdev_max_backlog=662144

web 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值

net.core.somaxconn=662144

限制仅仅是为了防止简单的DoS 攻击

net.ipv4.tcp_max_orphans=662144

未收到客户端确认信息的连接请求的最大值 可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_syn_backlog=662144

net.ipv4.tcp_timestamps=0

内核放弃建立连接之前发送SYNACK 包的数量

net.ipv4.tcp_synack_retries=1

内核放弃建立连接之前发送SYN 包的数量

net.ipv4.tcp_syn_retries=1

启用timewait 快速回收

net.ipv4.tcp_tw_recycle=1

开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_mem=94500000 915000000 927000000

net.ipv4.tcp_fin_timeout=3

当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时

net.ipv4.tcp_keepalive_time=30

允许系统打开的端口范围

net.ipv4.ip_local_port_range=10000 65000

修改防火墙表大小,默认65536 net.netfilter.nf_conntrack_max=655350 net.netfilter.nf_conntrack_tcp_timeout_established=1200 确保无人能修改路由表

net.ipv4.conf.all.accept_redirects=0

net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.all.secure_redirects=0

net.ipv4.conf.default.secure_redirects=0

sysctl -p 使配置生效

系统连接数的优化 查看当前系统允许打开的文件数(没修改的话就是1024) ulimit -n 编辑修改/etc/security/limits.conf 在末尾添加如下代码,

soft noproc 65535

hard noproc 65535

soft nofile 65535

hard nofile 65535

修改系统运行打开的最大连接数

ulimit -SHn 65535

nginx.conf的优化配置

nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。

worker_processes 8;

这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文 件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。 现在在linux2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。

worker_rlimit_nofile 65535;

useepoll;

使用epoll 的I/O 模型

(

补充说明:

与apache相类,nginx针对不同的操作系统,有不同的事件模型

A)标准事件模型 Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll B)高效事件模型

Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll: 使用于Linux内核2.6版本及以后的系统。

/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。

Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题,有必要安装安全补丁。

)

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

worker_connections 65535;

keepalive 超时时间。

keepalive_timeout 60;

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

client_header_buffer_size 4k;

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

open_file_cachemax=65535 inactive=60s;

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6d4e17837bbef8ae38eea5b58957c7e7.html