测试环境:
服务器配置: 4 x Intel(R) Xeon(R) CPU E5405 @ 2.00GHz, 4G内存, 操作系统: CentOS 5.3 x86_64
nginx前端 + 4 tornado(0.2) web process
tornado: http://www.tornadoweb.org (已被墙)
测试场景:
http get请求,服务器端直接返回"hello world"
代码及nginx配置:
main.py:
#
!/usr/bin/python
#
-*- coding: utf-8 -*-
"""
web main
"""
from
tornado.httpserver
import
HTTPServer
from
tornado.ioloop
import
IOLoop
from
tornado.web
import
RequestHandler, Application, authenticated
#
from rockps.auth import AuthHandler
class
MainHandler(RequestHandler):
def
get(self):
self.write(
"
hello world
"
)
settings
=
{
}
application
=
Application([
(r
"
/
"
, MainHandler),
],
**
settings)
if
__name__
==
"
__main__
"
:
http_server
=
HTTPServer(application)
http_server.listen(
8081
)
IOLoop.instance().start()
nginx.conf:
user root;
worker_processes
1
;
error_log
/
var
/
nginx_error.log;
pid
/
var
/
run
/
nginx.pid;
events {
worker_connections
51200
;
use epoll;
}
http {
#
Enumerate all the Tornado servers here
upstream frontends {
server
127.0
.
0.1
:
8081
;
server
127.0
.
0.1
:
8082
;
server
127.0
.
0.1
:
8083
;
server
127.0
.
0.1
:
8084
;
}
#
include /etc/nginx/mime.types;
default_type application
/
octet
-
stream;
access_log
/
var
/
log
/
nginx
/
access22.log;
keepalive_timeout
65
;
proxy_read_timeout
200
;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length
1000
;
gzip_proxied any;
gzip_types text
/
plain text
/
html text
/
css text
/
xml
application
/
x
-
javascript application
/
xml
application
/
atom
+
xml text
/
javascript;
#
Only retry if there was a communication error, not a timeout
#
on the Tornado server (to avoid propagating "queries of death"
#
to all frontends)
proxy_next_upstream error;
server {
listen
8085
;
#
Allow file uploads
client_max_body_size 50M;
location
^~
/
static
/
{
root
/
var
/
www;
if
($query_string) {
expires max;
}
}
location
=
/
favicon.ico {
rewrite (.
*
)
/
static
/
favicon.ico;
}
location
=
/
robots.txt {
rewrite (.
*
)
/
static
/
robots.txt;
}
location
/
{
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X
-
Real
-
IP $remote_addr;
proxy_set_header X
-
Scheme $scheme;
proxy_pass http:
//
frontends;
}
}
}
测试结果:
点击率可以超过7000,但后面再加用户开始往下掉,请求开始出错,最合适的时候大概3500个用户
持续运行后,连接数稳在1万。