搜尋

首頁  >  問答  >  主體

python - gunicorn supervisor nginx 配置问题,该给gunicorn几个worker,有没有必要上gevent

配置了一下午环境,跑起来是跑起来了,但是寻摸着一次琢磨透他们嘛。

鉴于gunicorn,supervisor用的不多,网络上找到资料很少(中文)

英文的也有些不太好懂。

想问下gunicorn可以设置worker设置几个比较合适呢。阿里云服务器,双核的。

supervisor是不是也有设置类似worker的地方,配置一下午迷糊了。

nginx呢。
晕乎乎的。

另外gevent不太了解,这个有必要上吗。我看配置起来蛮简单的。有什么优缺点呢。

谢谢各位。

PHPzPHPz2893 天前502

全部回覆(4)我來回復

  • 阿神

    阿神2017-04-18 09:17:36

    無論是worker还是NginxProcess,都是根据你的服务器的CPU核数决定的,你的阿里云只有双核(2个核)?

    gunicorn不是很了解,uWSGI也有个worker,一般设置成核数X2

    Nginx据说8個進程就可以了。

    網上搜尋一下Nginx優化,應該挺多教程的。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:17:36

    關於worker这个基本上是建议等于实际CPU核心数的一到两倍,我一般是有几个核,就用几个worker

    至於supervisor我好像并没有看到有关worker的設定。

    其實我是用的uwsgi + supervisor + nginx的组合。具体你可以google下,我也只是照着官方wiki來做,沒用到啥高大上的東西。

    PS:放棄中文資料吧,大都年久失修,英文雖然不好啃,但至少啃不到坑裡

    回覆
    0
  • 高洛峰

    高洛峰2017-04-18 09:17:36

    1. Gunicorn worker的數量從經驗的角度一般配置 2 * core + 1, core指的核心數。

    2. supervisor沒有配worker數這個概念,但是有配置進程數, numprocs 這個字段

    3. 如果用的gunicorn,一般建議將 worker_class 配置成 gevent, 這個你懂得.

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 09:17:36

    gunicorn 是常用的 WSGI 服务器,在目前应用中,和 uWSGI 都是比较常用的选择,而两者性能都相差不远。gunicorn 配置的 worker 数量官网的示例值是 2 * cpu数 + 1,官網範例

    import multiprocessing
    
    bind = "127.0.0.1:8000"
    workers = multiprocessing.cpu_count() * 2 + 1

    所以,以題主的雙核心伺服器來說,應該設為5 個合適。


    supervisor 是一个进程管理工具,可以用于管理N多的进程,不仅仅是 Gunicorn ,我甚至用来管理 Redis。确实,supervisor 中也存在类似worker数量的东西,叫procs,其实是进程数量,也就是说你配置了几个,supervisor就會幫你啟動幾個進程。

    需要注意的是,supervisorGunicorn 的 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 框架進行編寫。

    差不多就這麼多了,建議多看官方文件。

    回覆
    0
  • 取消回覆