我在Ubuntu 16.04上使用Postgres,Nginx和Gunicorn在数字海洋(512MB内存)中进行django应用。在运行应用程序时,它会占用更多内存。如果我浏览页面,它还会在使用顶部命令进行检查时消耗内存。问题是什么,可能的原因是什么。
Gunicorn
[Unit]
Description=veeyar daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/webapps/myproject/
ExecStart=/home/webapps/myproject/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/webapps/myproject/myproject.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Nginx的
server {
listen 9090;
location = /favicon.ico { access_log off; log_not_found off; }
location ^/static/ {
root /home/webapps/myproject/staticfiles;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/webapps/myproject/myproject.sock;
}
}
还有 settings.py 我设置了 DEBUG = False 。
我试着通过谷歌搜索它但我无法理解。为什么它发生这样而且我错过了什么。你能帮我解决一下这个问题。这对我来说非常充实。提前谢谢。
答案 0 :(得分:3)
我会建议你发表关于Django性能的this帖子,Django中巨大内存的一个主要原因是因为你使用的是list而不是迭代器。
问候。
答案 1 :(得分:2)
通过查看内存消耗量并不能真正反映问题所在或是否存在实际问题。 (除非您关心的是从同一个盒子运行的其他应用程序剩余多少内存)。否则,占用的内存实际上是应用程序所需的缓存。
我认为你应该专注于页面加载时间(和使用的内存)。对于每个页面,您总是检索一个大型查询集并从代码中迭代/过滤?是否有可以重复使用或组合的查询集,因此您不需要进行其他查询?当你有更多的应用程序用户而不是启动实例所需的内存时,这些会给你带来麻烦。
答案 2 :(得分:1)
查看Django docs对应用优化的看法。如果没有看到您的代码,很难说相关内容是什么。但这是一个很好的起点。
一个巨大的帮助 - 如果你正在迭代大QuerySet
s - 使用QuerySet.iterator() - 这会阻止整个QuerySet被缓存。