Uwsgi内存占用过多
2020-03-12 本文已影响0人
DjangoUnchained
问题发现
项目在Linux上运行时间过长的时候,客户端的请求就会部分出现 502 的返回。
登录服务器之后发现,系统可用内存仅剩200M不到,因此猜测是内存不够导致。

初步解决
刚开始并没有想到是Uwsgi占用的内存过多,而是觉得buff/cache占用过多

因此尝试了手动清缓存。
sysctl -w vm.drop_caches=1
根源解决
后来了解到了Uwsgi的有关内存的配置项,如下:
limit-as = 1024 ; 默认512,限制uwsgi进程占用虚拟内存的最大值,超过则会报错
reload-on-as = 1024 ; 在达到1024的时候重启进程
reload-on-rss = 1024 ;
evil-reload-on-as = 512 ;
evil-reload-on-rss = 512 ;
max-requests = 1000 ; Restart workers after this many requests
max-worker-lifetime = 3600 ; Restart workers after this many seconds
reload-on-rss = 1024 ; Restart workers after this much resident memory
worker-reload-mercy = 60 ; How long to wait before forcefully killing workers
根据自己的服务器硬件配置,适当配置这几个选项即可
最终结果

其他
另外附上一篇很优秀的关于uwsgi各项配置的文章
https://www.techatbloomberg.com/blog/configuring-uwsgi-production-deployment/