【问题标题】:Performance issues with DjangoDjango 的性能问题
【发布时间】:2012-02-20 13:50:36
【问题描述】:

我正在尝试找出我在使用 Django 时遇到的一些性能问题。从我单击刷新到浏览器得到响应的时间似乎有 600-800 毫秒的延迟。

我设置了一个简单的视图和配置文件中间件,这是视图和结果:

视图函数:

def test(request):
    return HttpResponse("It works")

个人资料结果(我用http://www.djangosnippets.org/snippets/186/):

9 function calls in 0.000 CPU seconds

Ordered by: internal time, call count

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:487(__init__)
    1    0.000    0.000    0.000    0.000 /home/mysite/mysite/mysite/map/views.py:19(test)
    1    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:532(__setitem__)
    3    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:517(_convert_to_ascii)
    2    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils/functional.py:274(__getattr__)
    1    0.000    0.000    0.000    0.000 /usr/lib/python2.6/Cookie.py:573(__init__)
    0    0.000             0.000          profile:0(profiler)


---- By file ----

 tottime
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils/functional.py
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py
0.0%   0.000 /usr/lib/python2.6/Cookie.py
0.0%   0.000 /home/mysite/mysite/mysite/map/views.py

---- By group ---

  tottime
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http
0.0%   0.000 /usr/lib/python2.6
0.0%   0.000 /home/mysite/mysite/mysite/map

因此,分析器没有返回任何数字,但 Chrome 报告从请求资源到实际获得任何响应有 647 毫秒的延迟。我对服务器的 ping 时间约为 50 毫秒。有什么想法可以让我获得更好的分析,以便我可以看到 Django 中的哪个位置导致了这种减速?

我的 WSGI 配置。我正在使用带有 uwsgi 的 Cherokee。

import os
import sys

path = '/home/mysite/mysite/mysite/'
if path not in sys.path:
    sys.path.append(path)



os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我在不同的计算机和不同的网络上看到了这种延迟(20 毫秒内)。当我只使用 manage.py runserver 时,我也会看到它。

【问题讨论】:

  • 您有多少次请求获取这些全为零的分析编号? “Chrome 报告延迟 647 毫秒”。你测量过你的电脑有多慢吗?网站的大部分缓慢都在桌面上,而不是网络上。
  • 您使用的是什么网络服务器?您是否尝试过使用 apache-utils 等实际的分析工具?
  • 我不知道,但这里有一个线索:可能是在您的分析器激活之前花费了时间。
  • 你好,S.Lott - 每当我跑到那个视图时,我都会得到全零。实际页面浏览量返回非零数字,但我想要一些非常简单的东西。 jpic - 这就是我的想法,但我不确定如何在我所做的之外描述它。我也尝试分析 manage.py runserver,但它没有给我任何关于实际 Django 系统的信息,它似乎只是 runserver 启动的配置文件。
  • 请从您的设置中显示 MIDDLEWARE_CLASSES 列表

标签: python django performance profiling


【解决方案1】:

Django 可能会因为几个原因而变慢。主要原因之一可能是不恰当或没有使用Memcached。浏览文档以了解有关拥有缓存的利弊的想法。您可能还会发现 this 文章很有用。

【讨论】:

    【解决方案2】:

    看起来你的 python 解释器会为每个请求重新加载。我的猜测:延迟发生在分析之前。如果您使用 mod_wsgi,您的最大请求数设置是多少?你的 wsgi 配置是什么样的?

    或者,您使用了大量 JavaScript,而延迟出现在您的浏览器中。

    【讨论】:

    • 我将在问题中发布我的 wsgi 配置。目前我正在使用 uwsgi,但如果我使用 runserver,我会看到几乎相同的延迟。有相当数量的 JS,但这是加载页面本身的等待。
    • 上面的wsgi配置只是python代码。我从未使用过 cherokee,但必须有一些配置,如最大请求。您可以使用毫秒记录来查看 cherokee 需要多长时间来处理此请求:cherokee-project.com/doc/modules_loggers_custom.html
    • 您可以在开始时使用 logging.info('start %s' % time.time()) 一次,如果您的代码,一次在您的代码结束时。间隙有多长? Django Debug Toolbar 也可能有帮助。但我主要将它用于调试数据库密集型视图。
    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 2020-11-15
    • 2020-04-01
    • 2012-03-31
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多