我有一个基于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
经过对stackflow和google搜索的深入研究后,这里是解决方案。
然后我知道在uwsgi.ini中设置的主要参数是max_request
。最初,我将其设置为2000。现在将其设置为50。因此,当内存增加过多时,它将重新生成工作程序。然后,我尝试找出哪个请求从数据库中导致了巨大的数据查询结果。我最终找到了这条小线:
amount=sum(x.amount for x in Project.objects.all())
虽然Project表中有超过一百万个复杂条目。占用大量内存。...自从我将其注释掉之后...现在一切运行顺利。
因此,很高兴了解[Django查询如何与数据库一起使用]
(对不起,我没有足够的声誉来发表评论-如果此答案对您没有帮助,请您道歉)
我在uwsgi / gninx上运行Django和通过超级用户控制uwsgi时遇到了相同的问题。 uwsgi-supervisor进程开始使用大量内存并消耗100%CPU,因此唯一的选择是反复重新启动uwsgi。
原来的解决方案是在uwsgi.ini文件中设置日志记录:
logto = /var/log/uwsgi.log