您的位置:首页 > 运维架构 > Nginx

flask+gevent+gunicorn+nginx 初试

2014-05-12 17:50 253 查看
1.安装flask

pip install flask

2.安装gevent

pip install gevent

3.安装gunicorn

pip install gunicorn

版本号信息如下:

[root@rs-2 ~]# pip list

Flask (0.10.1)

gevent (1.0.1)

greenlet (0.4.2)

gunicorn (18.0)

pip (1.5.5)

setuptools (3.6)

4.安装nginx

下载源码包安装,版本信息如下

[root@rs-2 sbin]# ./nginx -v

nginx version: nginx/1.7.0

5.nginx配置反向代理

listen 80;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

try_files @uri @pp;

}

location @pp {

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $http_host;

proxy_pass http://127.0.0.1:5000;
}

所有请求转发到gunicorn监听的5000上。

6.gunicorn配置

[root@rs-2 pythonTest]# cat gun.conf

import os

bind='127.0.0.1:5000'

workers=4

backlog=2048

worker_class="gevent" #sync, gevent,meinheld

debug=True

proc_name='gunicorn.pid'

pidfile='/var/log/gunicorn/debug.log'

loglevel='debug'

[root@rs-2 pythonTest]#

7.测试脚本编写

[root@rs-2 pythonTest]# cat run_test.py

from flask import Flask
from flask import render_template_string

import os

from werkzeug.contrib.fixers import ProxyFix

app = Flask(__name__)

@app.route("/")
def index():
return "Hello World"

app.wsgi_app = ProxyFix(app.wsgi_app)
if __name__ == "__main__":
app.run()


8.启动脚本

[root@rs-2 pythonTest]# gunicorn -c gun.conf run_test:app

看到如下部分输入

2014-05-12 10:29:41 [30260] [INFO] Listening at: http://127.0.0.1:5000 (30260)

2014-05-12 10:29:41 [30260] [INFO] Using worker: gevent

2014-05-12 10:29:41 [30265] [INFO] Booting worker with pid: 30265

2014-05-12 10:29:41 [30266] [INFO] Booting worker with pid: 30266

2014-05-12 10:29:41 [30267] [INFO] Booting worker with pid: 30267

2014-05-12 10:29:41 [30268] [INFO] Booting worker with pid: 30268

监听本机的5000端口,

工作模式为gevent,

开启4个进程

9.压力测试

在另一台虚拟上进行用ab模拟并发请求

报错:apr_socket_recv: No route to host (113)

[root@rs-1 ~]# time ab -n 200 -c 200 http://172.16.3.92/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 172.16.3.92 (be patient)

apr_socket_recv: No route to host (113)

real 0m0.078s

user 0m0.021s

sys 0m0.046s

解决方法:关闭目标服务器的防火墙

[root@rs-2 pythonTest]# service iptables stop

Flushing firewall rules: [ OK ]

Setting chains to policy ACCEPT: filter [ OK ]

Unloading iptables modules: [ OK ]

ok, 这下可以压力测试了

[root@rs-1 ~]# time ab -n 2000 -c 200 http://172.16.3.92/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 172.16.3.92 (be patient)

Completed 200 requests

Completed 400 requests

Completed 600 requests

Completed 800 requests

Completed 1000 requests

Completed 1200 requests

Completed 1400 requests

Completed 1600 requests

Completed 1800 requests

Completed 2000 requests

Finished 2000 requests

Server Software: nginx/1.7.0

Server Hostname: 172.16.3.92

Server Port: 80

Document Path: /

Document Length: 11 bytes

Concurrency Level: 200

Time taken for tests: 16.273 seconds

Complete requests: 2000

Failed requests: 0

Total transferred: 334000 bytes

HTML transferred: 22000 bytes

Requests per second: 122.90 [#/sec] (mean)

Time per request: 1627.313 [ms] (mean)

Time per request: 8.137 [ms] (mean, across all concurrent requests)

Transfer rate: 20.04 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 0 40 486.7 1 8992

Processing: 276 1032 250.5 1028 6300

Waiting: 273 1032 250.5 1027 6300

Total: 283 1072 618.1 1029 15292

Percentage of the requests served within a certain time (ms)

50% 1029

66% 1055

75% 1074

80% 1096

90% 1210

95% 1245

98% 1361

99% 2416

100% 15292 (longest request)

real 0m16.316s

user 0m0.598s

sys 0m1.447s
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: