配置了一下午环境,跑起来是跑起来了,但是寻摸着一次琢磨透他们嘛。
鉴于gunicorn,supervisor用的不多,网络上找到资料很少(中文)
英文的也有些不太好懂。
想问下gunicorn可以设置worker设置几个比较合适呢。阿里云服务器,双核的。
supervisor是不是也有设置类似worker的地方,配置一下午迷糊了。
nginx呢。晕乎乎的。
另外gevent不太了解,这个有必要上吗。我看配置起来蛮简单的。有什么优缺点呢。
谢谢各位。
学习是最好的投资!
無論是worker还是Nginx的Process,都是根据你的服务器的CPU核数决定的,你的阿里云只有双核(2个核)?
worker
Nginx
Process
CPU
2个核
gunicorn不是很了解,uWSGI也有个worker,一般设置成核数X2。
gunicorn
uWSGI
核数X2
Nginx据说8個進程就可以了。
8
網上搜尋一下Nginx優化,應該挺多教程的。
關於worker这个基本上是建议等于实际CPU核心数的一到两倍,我一般是有几个核,就用几个worker。
至於supervisor我好像并没有看到有关worker的設定。
supervisor
其實我是用的uwsgi + supervisor + nginx的组合。具体你可以google下,我也只是照着官方wiki來做,沒用到啥高大上的東西。
uwsgi
nginx
google
wiki
PS:放棄中文資料吧,大都年久失修,英文雖然不好啃,但至少啃不到坑裡
Gunicorn worker的數量從經驗的角度一般配置 2 * core + 1, core指的核心數。
2 * core + 1
supervisor沒有配worker數這個概念,但是有配置進程數, numprocs 這個字段
numprocs
如果用的gunicorn,一般建議將 worker_class 配置成 gevent, 這個你懂得.
worker_class
gevent
gunicorn 是常用的 WSGI 服务器,在目前应用中,和 uWSGI 都是比较常用的选择,而两者性能都相差不远。gunicorn 配置的 worker 数量官网的示例值是 2 * cpu数 + 1,官網範例
2 * cpu数 + 1
import multiprocessing bind = "127.0.0.1:8000" workers = multiprocessing.cpu_count() * 2 + 1
所以,以題主的雙核心伺服器來說,應該設為5 個合適。
5
而 supervisor 是一个进程管理工具,可以用于管理N多的进程,不仅仅是 Gunicorn ,我甚至用来管理 Redis。确实,supervisor 中也存在类似worker数量的东西,叫procs,其实是进程数量,也就是说你配置了几个,supervisor就會幫你啟動幾個進程。
Gunicorn
Redis
procs
需要注意的是,supervisor 和 Gunicorn 的 worker 是獨立的,假設兩個你都設定為 5 的話,那事實上會有 5 * 5 = 25 個進程提供服務的。
nginx 的話一般用於反向代理和負載平衡,假設你有兩個web應用運行在伺服器本地:
http://127.0.0.1:5000 部落格
http://127.0.0.1:8080 論壇
然後你想透過網域來分別存取這兩個應用,例如
http://baidu.com/blog 部落格
http://baidu.com/bss 論壇
那麼這就可以透過 nginx 來設定。
gevent 是协程的一个库,一般用于 IO密集型 应用,不建议使用。如果是IO密集型 应用,建议使用 Tornado 框架進行編寫。
IO密集型
Tornado
差不多就這麼多了,建議多看官方文件。
無論是
worker
还是Nginx
的Process
,都是根据你的服务器的CPU
核数决定的,你的阿里云只有双核(2个核
)?gunicorn
不是很了解,uWSGI
也有个worker
,一般设置成核数X2
。Nginx
据说8
個進程就可以了。網上搜尋一下
Nginx
優化,應該挺多教程的。關於
worker
这个基本上是建议等于实际CPU
核心数的一到两倍,我一般是有几个核,就用几个worker
。至於
supervisor
我好像并没有看到有关worker
的設定。其實我是用的
uwsgi
+supervisor
+nginx
的组合。具体你可以google
下,我也只是照着官方wiki
來做,沒用到啥高大上的東西。PS:放棄中文資料吧,大都年久失修,英文雖然不好啃,但至少啃不到坑裡
Gunicorn worker的數量從經驗的角度一般配置
2 * core + 1
, core指的核心數。supervisor沒有配worker數這個概念,但是有配置進程數,
numprocs
這個字段如果用的gunicorn,一般建議將
worker_class
配置成gevent
, 這個你懂得.gunicorn
是常用的 WSGI 服务器,在目前应用中,和uWSGI
都是比较常用的选择,而两者性能都相差不远。gunicorn
配置的 worker 数量官网的示例值是2 * cpu数 + 1
,官網範例所以,以題主的雙核心伺服器來說,應該設為
5
個合適。而
supervisor
是一个进程管理工具,可以用于管理N多的进程,不仅仅是Gunicorn
,我甚至用来管理Redis
。确实,supervisor
中也存在类似worker
数量的东西,叫procs
,其实是进程数量,也就是说你配置了几个,supervisor
就會幫你啟動幾個進程。需要注意的是,
supervisor
和Gunicorn
的 worker 是獨立的,假設兩個你都設定為 5 的話,那事實上會有 5 * 5 = 25 個進程提供服務的。nginx
的話一般用於反向代理和負載平衡,假設你有兩個web應用運行在伺服器本地:http://127.0.0.1:5000 部落格
http://127.0.0.1:8080 論壇
然後你想透過網域來分別存取這兩個應用,例如
http://baidu.com/blog 部落格
http://baidu.com/bss 論壇
那麼這就可以透過 nginx 來設定。
gevent
是协程的一个库,一般用于IO密集型
应用,不建议使用。如果是IO密集型
应用,建议使用Tornado
框架進行編寫。差不多就這麼多了,建議多看官方文件。