gevent gunicorn大アクセス時にカートンが発生する問題を解決

1325 ワード

あなたのウェブサイトの1つのとても普通のダイナミックなページはすべてとてもカードで、しかし静的なピクチャーはカードではありませんて、クラウドサーバーのCPUも高くありませんて、それではgunicornが渋滞して招いたので、同時に接続する人が多すぎるかもしれなくて、この时geventを使って協力して使う必要があります.
最近、何もないダイナミックなページを開くのに20秒もかかります.以前はサーバーの再起動などを試みていたが、正常に回復し、その後サーバーを再起動してもだめだったので、やはり問題を解決しなければならないようだが、gunicornは非同期ではないと思い、gevent非同期モードを使ってみるつもりだった.
第一歩、pipでgeventライブラリをインストールする
source /var/virtualenvs/mysite_venv/bin/activate
pip install gevent

ステップ2、gunicornプロファイルの変更
cd /mnt/www/mysite
vi gunicorn.conf

最後の行にgeventモードを加えると、ファイル全体の内容は次のようになります.
#    5
workers = 5
#     8000  ,                。
bind = '127.0.0.1:8000'
#  gevent  
worker_class="gevent" #sync, gevent,meinheld

保存してgunicornを再起動して、私はsupervisorを使うので、直接・・・supervisorctl reload・・
これで有効になりますから、簡単でしょう.他のところは修正する必要はありません.上の2つのステップで簡単にできます.
geventモードが有効になったら、瞬時にサイトを開きます.
副作用:接続プールが限界を超えた
サイトがデータベースにアクセスする必要がある場合は、SqlAlchemyがブロックされているため、geventを慎重に使用してください.これにより、データベース接続数が狂って増加し、接続プールの数を超え、データベースにアクセスするページが開かなくなります.
コードエラー:
sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 10 reached,

症状:静的ファイルが開く、データベースにアクセスしないページが秒開く、データベースにアクセスするページが開かない
生産環境応用結果
実際の問題解決:2つのシステム(短いリンクとパートナーシステム)未解決問題:1つのシステム(ニャンコ局、上記の副作用を生じる)