成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

WSGI server - Gunicorn worker調(diào)度--timeout問題分析

xiaodao / 4063人閱讀

摘要:前一段時(shí)間遇到一個(gè)問題,在啟動(dòng)之后一直報(bào)的錯(cuò)誤,并且一直不斷地重啟。先說一下配置,我們采用的是,數(shù)據(jù)庫連接采用的。

前一段時(shí)間遇到一個(gè)問題,gunicorn在啟動(dòng)之后worker一直報(bào)timeout的錯(cuò)誤,并且一直不斷地重啟。開始以為是worker內(nèi)部遇到什么錯(cuò)誤才導(dǎo)致gunicorn不斷地重啟worker。
先說一下配置,worker_class我們采用的是gevent,數(shù)據(jù)庫連接采用的mysql+sqlalchemy。因?yàn)樵赼pp啟動(dòng)時(shí)需要連接很多個(gè)數(shù)據(jù)庫,遇到這個(gè)問題就一直在糾結(jié)是不是程序的bug,數(shù)據(jù)庫連接太多會(huì)有問題,但程序沒有任何日志打出來?。??但是將連接數(shù)據(jù)庫的數(shù)量改小一點(diǎn),就不會(huì)再出現(xiàn)worker重啟的現(xiàn)象了。為什么數(shù)據(jù)庫連接數(shù)變小就不會(huì)timeout了呢?是不是master覺得worker的啟動(dòng)時(shí)間太長了,過了一定時(shí)間就直接干掉并重啟?后來將配置中的timeout改大,數(shù)據(jù)庫連接數(shù)改為原來的值,問題解決!

為什么會(huì)這樣?
看gunicorn源碼:
    def run(self):
        servers = []
        ssl_args = {}

        if self.cfg.is_ssl:
            ssl_args = dict(server_side=True, **self.cfg.ssl_options)

        for s in self.sockets:
            s.setblocking(1)
            pool = Pool(self.worker_connections)
            if self.server_class is not None:
                environ = base_environ(self.cfg)
                environ.update({
                    "wsgi.multithread": True,
                    "SERVER_SOFTWARE": VERSION,
                })
                **server = self.server_class(
                    s, application=self.wsgi, spawn=pool, log=self.log,
                    handler_class=self.wsgi_handler, environ=environ,
                    **ssl_args)**
            else:
                hfun = partial(self.handle, s)
                server = StreamServer(s, handle=hfun, spawn=pool, **ssl_args)

            server.start()
            servers.append(server)

        while self.alive:
            **self.notify()**
            gevent.sleep(1.0)

重點(diǎn)在server初始化的過程中,由于數(shù)據(jù)庫連接數(shù)量過多,這里耗費(fèi)時(shí)間過久,self.notify在timeout時(shí)間內(nèi)一直沒有執(zhí)行,導(dǎo)致主進(jìn)程master在timeout時(shí)間過后立即回收并重啟worker進(jìn)程,所以會(huì)導(dǎo)致上面的問題。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38317.html

相關(guān)文章

  • Python Web開發(fā)最難懂的WSGI協(xié)議,到底包含哪些內(nèi)容?

    摘要:通過回調(diào)函數(shù)將響應(yīng)狀態(tài)和響應(yīng)頭返回給,同時(shí)返回響應(yīng)正文,響應(yīng)正文是可迭代的并包含了多個(gè)字符串。返回響應(yīng)正文負(fù)責(zé)獲取請求,將請求傳遞給,由處理請求后返回。 我想大部分Python開發(fā)者最先接觸到的方向是WEB方向(因?yàn)榭偸怯虚_發(fā)者希望馬上給自己做個(gè)博客出來,例如我),既然是WEB,免不了接觸到一些WEB框架,例如Django,Flask,Torando等等,在開發(fā)過程中,看過一些文檔總會(huì)...

    atinosun 評論0 收藏0
  • CentOS 下使用 Pipenv + Gunicorn + Supervisor 部署 Flask

    摘要:根據(jù)中華人民共和國信息產(chǎn)業(yè)部第十二次部務(wù)會(huì)議審議通過的非經(jīng)營性互聯(lián)網(wǎng)信息服務(wù)備案管理辦法精神,在中華人民共和國境內(nèi)提供非經(jīng)營性互聯(lián)網(wǎng)信息服務(wù),應(yīng)當(dāng)辦理備案。未經(jīng)備案,不得在中華人民共和國境內(nèi)從事非經(jīng)營性互聯(lián)網(wǎng)信息服務(wù)。 當(dāng)我們開發(fā)了一個(gè)簡單的 Flask 程序,想把項(xiàng)目部署上線,我們可以選擇傳統(tǒng)的部署方式或者云部署方式把項(xiàng)目部署上線。在本文中,筆者將使用 阿里云輕量應(yīng)用服務(wù)器 安裝 C...

    anyway 評論0 收藏0
  • Gunicron + gevent Mongodb數(shù)據(jù)庫連接一直增加不釋放

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

    Yujiaao 評論0 收藏0
  • Gunicron + gevent Mongodb數(shù)據(jù)庫連接一直增加不釋放

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

    Taste 評論0 收藏0

發(fā)表評論

0條評論

xiaodao

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<