django + uwsgi巨大的内存使用量问题

时间:2014-03-25 05:29:06

标签: django memory uwsgi

我有一个基于django + uwsgi的网站。一些表有近100万行。

经过几次网站使用后,使用uwsgi进程的VIRT内存达到了近20GB ......几乎杀了我的服务器......

你能告诉别人可能导致这个问题的原因吗?是我的桌子行太大了吗? (不太可能.Pinterest有更多的数据)。现在,我不得不使用reload-on-as = 10024 reload-on-rss = 4800每隔几分钟杀死一次工人....这很痛苦...... 有什么帮助吗?

这是我的uwsgi.ini文件

[uwsgi]

chdir           = xxx
module          = xxx.wsgi
master          = true
processes       = 2
socket       =127.0.0.1:8004
chmod-socket    = 664
no-orphans = true
#limit-as=256
reload-on-as= 10024
reload-on-rss= 4800
max-requests=250
uid = www-data
gid = www-data
#chmod-socket = 777
chown-socket = www-data
# clear environment on exit
vacuum          = true

2 个答案:

答案 0 :(得分:19)

在对stackflow和谷歌搜索进行一些挖掘之后,这是解决方案。

然后我想出了在uwsgi.ini中设置的主要参数是max_request。最初,我把它设置为2000.现在设置为50.所以当内存增加太多时它会重生工作。 然后我试图找出哪个请求导致数据库的大量数据查询结果。我最终找到了这条小线:   amount = sum(Project.objects.all()中x的x.amount) 虽然Project表有超过100万个复杂的条目。占用大量的内存......因为我评论了这一点......现在一切顺利。

所以很好理解[django查询如何与数据库一起工作]

答案 1 :(得分:1)

(抱歉,我没有足够的声誉发表评论 - 如果这个答案对您的案件没有帮助,请致歉)

我在uwsgi / gninx上运行Django时遇到同样的问题,并且通过主管控制uwsgi。 uwsgi-supervisor进程开始使用大量内存并占用100%的CPU,因此只有选项才能重复重启uwsgi。

原来解决方案是在uwsgi.ini文件中设置日志记录:

logto = /var/log/uwsgi.log

这里有一些讨论:https://github.com/unbit/uwsgi/issues/296