分析Django启动内存足迹

时间:2018-10-03 13:11:16

标签: python django memory optimization

我正在尝试优化Django 1.8项目的内存使用率,并且我注意到,即使从初始化开始,它就使用80 + MB,这似乎过多。我只是运行./manage shell --plain时就观察到了这一点。相比之下,启动时空的Django项目仅使用30MB。我想知道什么消耗了这么多内存。

我已经尝试了各种措施来减少内存消耗,包括通过删除项目的应用程序和URL来大量减少项目。我尝试在gc.get_objects周围戳一下,但这并不容易理解。我对tracemalloc感到很兴奋,因此我构建了一个包含tracemalloc的自定义Python 2.7.8,只是意识到直到我从提示符下调用start()时,它才会开始跟踪。点内存已被消耗。

问题:

  1. 什么原因可能导致内存不足?
  2. 我可以使用什么过程来确定消费者?

是的,我知道这些版本急需升级。谢谢!

更新#1

我确实设法使用了tracemalloc。我插入了导入,并从manage.py的开头开始。

/Users/john/.venv/proj-tracemalloc/lib/python2.7/site-packages/zinnia/comparison.py:19: size=25.0 MiB (+25.0 MiB), count=27168 (+27168), average=993 B
/usr/local/tracemalloc-py2.7.8/py27/lib/python2.7/importlib/__init__.py:37: size=3936 KiB (+3936 KiB), count=9581 (+9581), average=420 B
...

它确实揭示了一件有趣的事情-第一行是一个博客应用程序。尽管我认为这是暂时的,但此循环似乎占用了大量内存。到第3行,所有内容都为1.5MB或更小。

PUNCTUATION = dict.fromkeys(
    i for i in range(sys.maxunicode)
    if unicodedata.category(six.unichr(i)).startswith('P')
)

更新#2

我经历了繁琐的卸载软件包,应用程序和修复损坏代码的过程。最后,似乎10MB是由于我的内部应用程序,而25MB是由于Django调试工具栏。这使我降至45MB。对于我的核心应用程序来说,使用15MB内存(将其减少到30MB核心)似乎并不合理。我没有在生产环境中使用工具栏,但它确实需要额外的内存才能实际工作。

最后,我没有学到很多东西,但至少似乎没有什么错的。我对tracemalloc感到失望,但希望它与Python 3集成起来会更好。

0 个答案:

没有答案