dde*_*eny 18 python apache django memory-leaks
您是否了解了根据请求记录django应用程序内存使用情况的有效方法?
我有一个apache/mod_wsgi/django堆栈,它通常运行良好,但有时一个进程最终会占用大量内存.服务器最终缺少内存,交换很多,服务大大减慢.
这种情况很难修复,因为我不知道哪个请求会被归咎于此行为,我无法重现它.
我希望在生产中部署一些内容,在每次请求之前和之后记录进程的内存使用情况,并且开销最小.
在我开始重新发明轮子之前,我的同伴们的社区是否知道解决这个问题的任何现有解决方案?建议,中间件,片段或apache日志配置赞赏.
(我认为)我不需要的是:
我最接近的搜索结果:
Gra*_*ton 18
用于跟踪内存使用情况并立即生成可用结果的Django中间件需要挂钩进程请求和进程响应.换句话说,查看请求的开始和结束之间的差异,并在超过某个阈值时记录警告.
一个完整的中间件示例是:
import os
import psutil
import sys
THRESHOLD = 2*1024*1024
class MemoryUsageMiddleware(object):
def process_request(self, request):
request._mem = psutil.Process(os.getpid()).memory_info()
def process_response(self, request, response):
mem = psutil.Process(os.getpid()).memory_info()
diff = mem.rss - request._mem.rss
if diff > THRESHOLD:
print >> sys.stderr, 'MEMORY USAGE %r' % ((diff, request.path),)
return response
Run Code Online (Sandbox Code Playgroud)
这需要安装'psutil'模块进行内存计算.
蛮力并且可能导致多线程系统中的误报.由于延迟加载,您还会看到它会因为内容加载而触发针对新进程的前几个请求.