【问题标题】:Django Application consuming memory in the serverDjango 应用程序在服务器中消耗内存
【发布时间】:2017-12-19 01:44:43
【问题描述】:

我在 Ubuntu 16.04 上使用 Postgres、Nginx 和 Gunicorn 在 Digital Ocean(512MB 内存)中有 django 应用程序。在运行应用程序时,它会消耗更多内存。如果我浏览页面,它也会在使用 top 命令检查时消耗内存。会出现什么问题,可能的原因是什么。

独角兽

[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

我尝试通过谷歌搜索,但我无法正确理解。为什么会这样,我错过了什么。你们能帮我解决这个问题吗?这对我来说将是非常充分的。提前致谢。

【问题讨论】:

  • 您的设置看起来还不错,您是否执行任何长时间运行/计算任务?
  • @OrDuan 感谢您的回复。不,我没有任何长时间运行/计算的任务。但是有更多来自不同表的近 14000 行记录。
  • 你有内存泄漏,没有代码很难说哪里。检查您是否更改了在调用中持续存在的变量,因为它们是全局变量或导入变量。
  • @KlausD。感谢您的答复。从某种意义上说内存泄漏,我可以在我的代码中解决这个问题吗?
  • 造成内存泄漏的方法太多,这里就不一一解释了。对不起。

标签: python django memory server


【解决方案1】:

我会推荐你​​this 发布 Django 性能,Django 中巨大内存的主要原因之一是因为你使用的是列表而不是迭代器。

问候。

【讨论】:

  • 这是推荐的。谢谢
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回答,您的解释有些道理。让我看看你的询问。
【解决方案3】:

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

一个巨大的帮助是 - 如果您要迭代大型 QuerySets - 使用 QuerySet.iterator() - 它可以阻止整个 QuerySet 被缓存。

【讨论】:

  • 非常感谢你的回复,你能告诉我应该在哪里使用 QuerySet.iterator() ,任何例子。
猜你喜欢
  • 2010-10-09
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多