摘要:前一段時(shí)間遇到一個(gè)問(wèn)題,在啟動(dòng)之后一直報(bào)的錯(cuò)誤,并且一直不斷地重啟。先說(shuō)一下配置,我們采用的是,數(shù)據(jù)庫(kù)連接采用的。
前一段時(shí)間遇到一個(gè)問(wèn)題,gunicorn在啟動(dòng)之后worker一直報(bào)timeout的錯(cuò)誤,并且一直不斷地重啟。開(kāi)始以為是worker內(nèi)部遇到什么錯(cuò)誤才導(dǎo)致gunicorn不斷地重啟worker。
先說(shuō)一下配置,worker_class我們采用的是gevent,數(shù)據(jù)庫(kù)連接采用的mysql+sqlalchemy。因?yàn)樵赼pp啟動(dòng)時(shí)需要連接很多個(gè)數(shù)據(jù)庫(kù),遇到這個(gè)問(wèn)題就一直在糾結(jié)是不是程序的bug,數(shù)據(jù)庫(kù)連接太多會(huì)有問(wèn)題,但程序沒(méi)有任何日志打出來(lái)啊?。康菍⑦B接數(shù)據(jù)庫(kù)的數(shù)量改小一點(diǎn),就不會(huì)再出現(xiàn)worker重啟的現(xiàn)象了。為什么數(shù)據(jù)庫(kù)連接數(shù)變小就不會(huì)timeout了呢?是不是master覺(jué)得worker的啟動(dòng)時(shí)間太長(zhǎng)了,過(guò)了一定時(shí)間就直接干掉并重啟?后來(lái)將配置中的timeout改大,數(shù)據(jù)庫(kù)連接數(shù)改為原來(lái)的值,問(wèn)題解決!
為什么會(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初始化的過(guò)程中,由于數(shù)據(jù)庫(kù)連接數(shù)量過(guò)多,這里耗費(fèi)時(shí)間過(guò)久,self.notify在timeout時(shí)間內(nèi)一直沒(méi)有執(zhí)行,導(dǎo)致主進(jìn)程master在timeout時(shí)間過(guò)后立即回收并重啟worker進(jìn)程,所以會(huì)導(dǎo)致上面的問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/38317.html
摘要:通過(guò)回調(diào)函數(shù)將響應(yīng)狀態(tài)和響應(yīng)頭返回給,同時(shí)返回響應(yīng)正文,響應(yīng)正文是可迭代的并包含了多個(gè)字符串。返回響應(yīng)正文負(fù)責(zé)獲取請(qǐng)求,將請(qǐng)求傳遞給,由處理請(qǐng)求后返回。 我想大部分Python開(kāi)發(fā)者最先接觸到的方向是WEB方向(因?yàn)榭偸怯虚_(kāi)發(fā)者希望馬上給自己做個(gè)博客出來(lái),例如我),既然是WEB,免不了接觸到一些WEB框架,例如Django,Flask,Torando等等,在開(kāi)發(fā)過(guò)程中,看過(guò)一些文檔總會(huì)...
摘要:根據(jù)中華人民共和國(guó)信息產(chǎn)業(yè)部第十二次部務(wù)會(huì)議審議通過(guò)的非經(jīng)營(yíng)性互聯(lián)網(wǎng)信息服務(wù)備案管理辦法精神,在中華人民共和國(guó)境內(nèi)提供非經(jīng)營(yíng)性互聯(lián)網(wǎng)信息服務(wù),應(yīng)當(dāng)辦理備案。未經(jīng)備案,不得在中華人民共和國(guó)境內(nèi)從事非經(jīng)營(yíng)性互聯(lián)網(wǎng)信息服務(wù)。 當(dāng)我們開(kāi)發(fā)了一個(gè)簡(jiǎn)單的 Flask 程序,想把項(xiàng)目部署上線,我們可以選擇傳統(tǒng)的部署方式或者云部署方式把項(xiàng)目部署上線。在本文中,筆者將使用 阿里云輕量應(yīng)用服務(wù)器 安裝 C...
摘要:解決過(guò)程關(guān)于什么是是一個(gè)上被廣泛使用的高性能的。和大多數(shù)的框架兼容,并具有實(shí)現(xiàn)簡(jiǎn)單,輕量級(jí),高性能等特點(diǎn)。為了解決這個(gè)問(wèn)題,在實(shí)例化對(duì)象的時(shí)候要加上參數(shù)。參考用來(lái),能否長(zhǎng)連接連接從未發(fā)布和在上使用 問(wèn)題描述 使用Flask開(kāi)發(fā)的Web服務(wù),部署在服務(wù)器上使用的是gunicorn manage:app -k gevent -w 4 某日告警,說(shuō)瀏覽器崩了,當(dāng)時(shí)急急忙忙的重啟,...
摘要:解決過(guò)程關(guān)于什么是是一個(gè)上被廣泛使用的高性能的。和大多數(shù)的框架兼容,并具有實(shí)現(xiàn)簡(jiǎn)單,輕量級(jí),高性能等特點(diǎn)。為了解決這個(gè)問(wèn)題,在實(shí)例化對(duì)象的時(shí)候要加上參數(shù)。參考用來(lái),能否長(zhǎng)連接連接從未發(fā)布和在上使用 問(wèn)題描述 使用Flask開(kāi)發(fā)的Web服務(wù),部署在服務(wù)器上使用的是gunicorn manage:app -k gevent -w 4 某日告警,說(shuō)瀏覽器崩了,當(dāng)時(shí)急急忙忙的重啟,...
閱讀 3156·2021-08-03 14:05
閱讀 2210·2019-08-29 15:35
閱讀 734·2019-08-29 13:30
閱讀 3235·2019-08-29 13:20
閱讀 2590·2019-08-23 18:15
閱讀 1857·2019-08-23 14:57
閱讀 2280·2019-08-23 13:57
閱讀 1397·2019-08-23 12:10