国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Gunicron + gevent Mongodb數據庫連接一直增加不釋放

Taste / 1308人閱讀

摘要:解決過程關于什么是是一個上被廣泛使用的高性能的。和大多數的框架兼容,并具有實現簡單,輕量級,高性能等特點。為了解決這個問題,在實例化對象的時候要加上參數。參考用來,能否長連接連接從未發布和在上使用

問題描述

使用Flask開發的Web服務,部署在服務器上使用的是gunicorn manage:app -k gevent -w 4

某日告警,說瀏覽器崩了,當時急急忙忙的重啟,搞好了,因為所有的服務都正常運行,后面查看日志,也沒有發現什么特別的地方,最終感覺因該是MongoDB連接數滿了,本地測試發現確實是連接數一直增加,不會釋放。


解決過程 關于Gunicron

什么是Gunicron:是一個unix上被廣泛使用的高性能的Python WSGI UNIX HTTP Server。和大多數的web框架兼容,并具有實現簡單,輕量級,高性能等特點。

深入理解uwsgi和gunicorn網絡模型

為什么要使用Gunicron:用于接受http請求并轉換為WSGI協議,以供實現了WSGI協議的flask使用,并且gunicorn得益于gevent等技術,大幅度提高了性能,在生產環境以替代框架自帶的WSGI server。

生產環境

配置

gevent==1.3.6
greenlet==0.4.14
gunicorn==19.9.0
pymongo==3.7.0

mongodb連接代碼

    def __init__(self):
        config_name = os.getenv("FLASK_CONFIG") or "default"
        base_config = config[config_name]  # object
        self.client = MongoClient(host=base_config.MONGO_HOST, port=base_config.MONGO_PORT)
        db_name = base_config.MONGO_NAME
        self.db = self.client[db_name]
修改方案

參考pymongo: MongoClient opened before fork錯誤排解

fork是啟動新進程的方法,由于MongoClient不是進程安全的,所以不可以將該實例從父進程中復制到子進程當中。在這個flask應用中,flask使用gunicorn作為網關接口,在啟動的時候會啟動一個主進程和多個子進程,也就是master/workers,這個時候就出現了MongoClient實例在進程之間的傳遞。

為了解決這個問題,在實例化MongoClient對象的時候要加上connect=False參數。

    def __init__(self):
        config_name = os.getenv("FLASK_CONFIG") or "default"
        base_config = config[config_name]  # object
        self.client = MongoClient(host=base_config.MONGO_HOST, port=base_config.MONGO_PORT, maxIdleTimeMS=300000, connect=False)
        db_name = base_config.MONGO_NAME
        self.db = self.client[db_name]
參考

用gevent來host wsgi server,mysql能否長連接

python – Mongo連接從未發布 – Django和Mongoengine在gevent上使用gunicorn

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19571.html

相關文章

  • Gunicron + gevent Mongodb據庫連接一直增加釋放

    摘要:解決過程關于什么是是一個上被廣泛使用的高性能的。和大多數的框架兼容,并具有實現簡單,輕量級,高性能等特點。為了解決這個問題,在實例化對象的時候要加上參數。參考用來,能否長連接連接從未發布和在上使用 問題描述 使用Flask開發的Web服務,部署在服務器上使用的是gunicorn manage:app -k gevent -w 4 某日告警,說瀏覽器崩了,當時急急忙忙的重啟,...

    Yujiaao 評論0 收藏0
  • Flask+python3+supervisor+redis+docker+nginx技術架構web

    摘要:總結本次鏡像化大概花了一周的時間,包括測試和解決一些坑,很多知識點包括原來的項目都不是太熟悉,所以記錄一下,可能回頭會發現這些很,但是相信對一些人還是有用的。 背景 手里有一個web項目,代碼按照前端代碼庫、后端代碼庫分別在GitHub上,分散帶來的結果是,不容易持續集成,比如你可能需要很多的job去保證一個項目的正常運作,但是這個項目也不是特別大,所以嘗試將代碼融合,于此同時將代碼d...

    susheng 評論0 收藏0
  • Flask+python3+supervisor+redis+docker+nginx技術架構web

    摘要:總結本次鏡像化大概花了一周的時間,包括測試和解決一些坑,很多知識點包括原來的項目都不是太熟悉,所以記錄一下,可能回頭會發現這些很,但是相信對一些人還是有用的。 背景 手里有一個web項目,代碼按照前端代碼庫、后端代碼庫分別在GitHub上,分散帶來的結果是,不容易持續集成,比如你可能需要很多的job去保證一個項目的正常運作,但是這個項目也不是特別大,所以嘗試將代碼融合,于此同時將代碼d...

    mo0n1andin 評論0 收藏0
  • Flask+python3+supervisor+redis+docker+nginx技術架構web

    摘要:總結本次鏡像化大概花了一周的時間,包括測試和解決一些坑,很多知識點包括原來的項目都不是太熟悉,所以記錄一下,可能回頭會發現這些很,但是相信對一些人還是有用的。 背景 手里有一個web項目,代碼按照前端代碼庫、后端代碼庫分別在GitHub上,分散帶來的結果是,不容易持續集成,比如你可能需要很多的job去保證一個項目的正常運作,但是這個項目也不是特別大,所以嘗試將代碼融合,于此同時將代碼d...

    Jioby 評論0 收藏0
  • mongo連接分析

    摘要:本文旨在梳理這些問題,進行一個全面的分析。等到進行數據庫操作的時候,再去中獲取一個連接,進行操作總結通過以上分析,對于以下的數據庫連接池與關系型數據庫連接池并無區別。 摘要 在前面的文章中有分析過關系型數據庫的連接,以及連接池的原理。在mongo數據庫同樣存在,經常看到有網友在問mongo 連接了數據庫要不要關,怎么關。內置的數據庫連接池是單線程還是多線程,mongo服務器為什么會殺游...

    yuanxin 評論0 收藏0

發表評論

0條評論

Taste

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<