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