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