实战配置高QPS服务器(Nginx+Tomcat)

实际情况:需要满足QPS=5000的请求,大部分请求来自于几个固定IP,即可以利用keep-alive特性来重复利用TCP连接。系统是CentOS 6

一、调整内核参数

net.ipv4.tcp_syncookies = 1 #开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理,主要为防止DoS攻击
net.core.somaxconn = 2048 #定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认的 128 太小了,建议调大
net.ipv4.tcp_tw_reuse = 1 #开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle = 0 #启用timewait快速回收,但如果开启了该值,并同时开启了tcp_timestamps,会产生时间戳错乱的现象,建议关闭
net.ipv4.tcp_keepalive_time = 900 #TCP发送keepalive消息的频度。缺省是2小时。这里设为15分钟
net.ipv4.tcp_fin_timeout = 15 #保持在FIN-WAIT-2状态的时间,默认60s
net.ipv4.ip_local_port_range = 10240 65535 #允许系统打开的端口范围,10240以下的保留
net.ipv4.tcp_max_syn_backlog = 8192 #记录的那些尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_tw_buckets = 5000 #timewait的数量,默认是180000。
net.ipv4.tcp_max_orphans = 131072 #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,即孤儿连接,主要是为了防止DoS攻击

将以上参数写入到/etc/sysctl.conf,然后sysctl -p重新加载,加载完立即生效。

其他的参数采用默认值,可参考 http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8 查看更多参数

二、调整Nginx参数

main部分

worker_processes  8; #根据CPU核数决定
worker_rlimit_nofile 65536; #一个nginx进程打开的最多文件数,跟ulimit -n保持一致
events {
    use epoll; #优化IO模型
    worker_connections 10240; #不要设置太高,否则线程切换会造成很大负担
}

keepalive_timeout 15; #如果短连接居多,建议缩短

upstream部分

keepalive 128; #connection数量,用于Nginx跟后端的keep-alive连接,因为upstream后端以长连接为主,该值设定非常有效。设的越大,占用内存越多
proxy_http_version      1.1; #在location内设定
proxy_set_header Connection ""; #在location内设定

该部分可以详见,http://blog.csdn.net/lizhiqiang50/article/details/7551292

三、Tomcat调整 

maxThreads="300" #默认200,不要设的太高,否则线程切换会造成CPU很大负担,表现情况就是TOP看sy%比例很高。
minSpareThreads="50"
connectionTimeout="20000" #20秒
keepAliveTimeout="15000" #15秒

 

 

 

posted @ 2013-04-02 01:20  我的白日梦  阅读(7598)  评论(0编辑  收藏  举报