我正在尝试优化Django 1.8项目的内存使用率,并且我注意到,即使从初始化开始,它就使用80 + MB,这似乎过多。我只是运行./manage shell --plain
时就观察到了这一点。相比之下,启动时空的Django项目仅使用30MB。我想知道什么消耗了这么多内存。
我已经尝试了各种措施来减少内存消耗,包括通过删除项目的应用程序和URL来大量减少项目。我尝试在gc.get_objects
周围戳一下,但这并不容易理解。我对tracemalloc
感到很兴奋,因此我构建了一个包含tracemalloc
的自定义Python 2.7.8,只是意识到直到我从提示符下调用start()
时,它才会开始跟踪。点内存已被消耗。
问题:
是的,我知道这些版本急需升级。谢谢!
更新#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集成起来会更好。