linuxNginx达并发数高TCP TIME_WAIT套接字数量经达两、三万服务器容易拖死事实我简单通修改Linux内核参数减少Nginx服务器TIME_WAIT套接字数量进提高Nginx服务器并发性能

vi /etc/sysctl.conf

增加几行:

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000简单说明:
net.ipv4.tcp_syncookies = 1 表示启SYN Cookies现SYN等待队列溢启用cookies处理防范少量SYN攻击默认0表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示启重用允许TIME-WAIT sockets重新用于新TCP连接默认0表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示启TCP连接TIME-WAIT sockets快速收默认0表示关闭
net.ipv4.tcp_fin_timeout = 30 表示套接字由本端要求关闭参数决定保持FIN-WAIT-2状态间
net.ipv4.tcp_keepalive_time = 1200 表示keepalive起用候TCP发送keepalive消息频度缺省2改20钟
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接端口范围缺省情况:3276861000改102465000
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列度默认1024加队列度8192容纳更等待连接网络连接数

net.ipv4.tcp_max_tw_buckets = 5000 表示系统同保持TIME_WAIT套接字数量超数字TIME_WAIT套接字立刻清除并打印警告信息默认180000改 5000于Apache、Nginx等服务器几行参数减少TIME_WAIT套接字数量于Squid效却项参 数控制TIME_WAIT套接字数量避免Squid服务器量TIME_WAIT套接字拖死

echo ====================== 执行命令使配置效:=========================
#更改linux内核参数立即效命令
/sbin/sysctl -p
Nginx优化
使用FastCGI 缓存
fastcgi_cache TEST
启FastCGI 缓存并且其制定名称觉启缓存非用效降低CPU 负载并且防止502 错误
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
keys_zone=TEST:10m
inactive=5m;

指令FastCGI 缓存指定路径目录结构等级关键字区域存储间非删除间

其说明

Nginx 由 Igor Sysoev 俄罗斯访问量第二 Rambler.ru 站点发已经该站点运行超两半Igor 源代码类BSD许证形式发布

高并发连接情况NginxApache服务器错替代品Nginx同作7层负载均衡服务器使用根据我测试结 Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 承受3万并发连接数相于同等环境Apache10倍

根据我经验4GB内存服务器+Apache(prefork模式)般能处理3000并发连接占用3GB内存 系统预留1GB内存我曾经两台Apache服务器配置文件设置MaxClients4000Apache并发连接数达 3800导致服务器内存Swap空间用满崩溃

台 Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 服务器3万并发连接启10Nginx进程消耗150M内存(15M*10=150M)启64php-cgi进程消耗1280M内存 (20M*64=1280M)加系统自身消耗内存总共消耗2GB内存服务器内存较完全启25php-cgi进程 php-cgi消耗总内存数才500M