摘要:前一段時(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
摘要:通過回調(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ì)...
摘要:根據(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...
摘要:解決過程關(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í)急急忙忙的重啟,...
摘要:解決過程關(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í)急急忙忙的重啟,...
閱讀 3106·2021-08-03 14:05
閱讀 2152·2019-08-29 15:35
閱讀 689·2019-08-29 13:30
閱讀 3177·2019-08-29 13:20
閱讀 2541·2019-08-23 18:15
閱讀 1807·2019-08-23 14:57
閱讀 2224·2019-08-23 13:57
閱讀 1320·2019-08-23 12:10