django + uwsgi过多的内存使用问题

问题描述 投票:8回答:2

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

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

您能告诉您造成此问题的原因吗?我的桌子排太大了吗? (不太可能。Pinterest有更多数据)。现在,我不得不使用reload-on-as = 10024reload-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
django memory uwsgi
2个回答
21
投票

经过对stackflow和google搜索的深入研究后,这里是解决方案。

然后我知道在uwsgi.ini中设置的主要参数是max_request。最初,我将其设置为2000。现在将其设置为50。因此,当内存增加过多时,它将重新生成工作程序。然后,我尝试找出哪个请求从数据库中导致了巨大的数据查询结果。我最终找到了这条小线:

  amount=sum(x.amount for x in Project.objects.all()) 

虽然Project表中有超过一百万个复杂条目。占用大量内存。...自从我将其注释掉之后...现在一切运行顺利。

因此,很高兴了解[Django查询如何与数据库一起使用]


1
投票

(对不起,我没有足够的声誉来发表评论-如果此答案对您没有帮助,请您道歉)

我在uwsgi / gninx上运行Django和通过超级用户控制uwsgi时遇到了相同的问题。 uwsgi-supervisor进程开始使用大量内存并消耗100%CPU,因此唯一的选择是反复重新启动uwsgi。

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

logto = /var/log/uwsgi.log

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

© www.soinside.com 2019 - 2024. All rights reserved.