From 28df9926d7c650248d267eeafaa8b2c2cdd9af38 Mon Sep 17 00:00:00 2001 From: Chris Mildebrandt Date: Fri, 11 Sep 2020 22:41:27 -0700 Subject: [PATCH 1/2] Add additional logs when worker exits abnormally --- gunicorn/arbiter.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gunicorn/arbiter.py b/gunicorn/arbiter.py index 532426d2..caa3fbad 100644 --- a/gunicorn/arbiter.py +++ b/gunicorn/arbiter.py @@ -527,6 +527,27 @@ class Arbiter(object): reason = "App failed to load." raise HaltServer(reason, self.APP_LOAD_ERROR) + if exitcode > 0: + # If the exit code of the worker is greater than 0, + # let the user know. + self.log.error("Worker (pid:%s) exited with code %s.", + wpid, exitcode) + elif status > 0: + # If the exit code of the worker is 0 and the status + # is greater than 0, then it was most likely killed + # via a signal. + try: + sig_name = signal.Signals(status).name + except ValueError: + sig_name = "code %s".format(status) + msg = "Worker (pid:{}) was sent {}!".format( + wpid, sig_name) + + # Additional hint for SIGKILL + if status == signal.SIGKILL: + msg += " Perhaps out of memory?" + self.log.error(msg) + worker = self.WORKERS.pop(wpid, None) if not worker: continue From ca36d410fd86c82cb2c998a1dab5f7f967405fdd Mon Sep 17 00:00:00 2001 From: Chris Mildebrandt Date: Fri, 11 Sep 2020 23:05:38 -0700 Subject: [PATCH 2/2] Fix format call --- gunicorn/arbiter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gunicorn/arbiter.py b/gunicorn/arbiter.py index caa3fbad..b8b92fec 100644 --- a/gunicorn/arbiter.py +++ b/gunicorn/arbiter.py @@ -539,7 +539,7 @@ class Arbiter(object): try: sig_name = signal.Signals(status).name except ValueError: - sig_name = "code %s".format(status) + sig_name = "code {}".format(status) msg = "Worker (pid:{}) was sent {}!".format( wpid, sig_name)