mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
add memory watch example
This commit is contained in:
parent
4005614ced
commit
aee54903a6
38
examples/when_ready.conf.py
Normal file
38
examples/when_ready.conf.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import signal
|
||||||
|
import commands
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
max_mem = 100000
|
||||||
|
|
||||||
|
class MemoryWatch(threading.Thread):
|
||||||
|
|
||||||
|
def __init__(self, server, max_mem):
|
||||||
|
super(MemoryWatch, self).__init__()
|
||||||
|
self.daemon = True
|
||||||
|
self.server = server
|
||||||
|
self.max_mem = max_mem
|
||||||
|
self.timeout = server.timeout / 2
|
||||||
|
|
||||||
|
def memory_usage(self, pid):
|
||||||
|
try:
|
||||||
|
out = commands.getoutput("ps -o rss -p %s" % pid)
|
||||||
|
except IOError:
|
||||||
|
return -1
|
||||||
|
used_mem = sum(int(x) for x in out.split('\n')[1:])
|
||||||
|
return used_mem
|
||||||
|
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
while True:
|
||||||
|
for (pid, worker) in list(self.server.WORKERS.items()):
|
||||||
|
if self.memory_usage(pid) > self.max_mem:
|
||||||
|
self.server.log.info("Pid %s killed (memory usage > %s)" % (
|
||||||
|
pid, self.max_mem))
|
||||||
|
self.server.kill_worker(pid, signal.SIGQUIT)
|
||||||
|
time.sleep(self.timeout)
|
||||||
|
|
||||||
|
|
||||||
|
def when_ready(server):
|
||||||
|
mw = MemoryWatch(server, max_mem)
|
||||||
|
mw.start()
|
||||||
Loading…
x
Reference in New Issue
Block a user