Django应用程序消耗服务器中的内存

时间:2017-07-14 04:46:40

标签: python django memory server

我在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

我试着通过谷歌搜索它但我无法理解。为什么它发生这样而且我错过了什么。你能帮我解决一下这个问题。这对我来说非常充实。提前谢谢。

3 个答案:

答案 0 :(得分:3)

我会建议你发表关于Django性能的this帖子,Django中巨大内存的一个主要原因是因为你使用的是list而不是迭代器。

问候。

答案 1 :(得分:2)

通过查看内存消耗量并不能真正反映问题所在或是否存在实际问题。 (除非您关心的是从同一个盒子运行的其他应用程序剩余多少内存)。否则,占用的内存实际上是应用程序所需的缓存。

我认为你应该专注于页面加载时间(和使用的内存)。对于每个页面,您总是检索一个大型查询集并从代码中迭代/过滤?是否有可以重复使用或组合的查询集,因此您不需要进行其他查询?当你有更多的应用程序用户而不是启动实例所需的内存时,这些会给你带来麻烦。

答案 2 :(得分:1)

查看Django docs对应用优化的看法。如果没有看到您的代码,很难说相关内容是什么。但这是一个很好的起点。

一个巨大的帮助 - 如果你正在迭代大QuerySet s - 使用QuerySet.iterator() - 这会阻止整个QuerySet被缓存。