0

我有一个 django 应用程序,在gunicorn服务器上运行 django suit,加载管理的每个页面(列表和编辑视图)都需要花费大量时间。具有 1 条没有外键且没有可调用对象的单条记录的表的列表视图需要 6-8 秒,而分页到 50 个元素的表的列表视图需要 25-30 秒。

我检查了执行的 SQL,认为日志模块具有以下配置,它们似乎没问题,所有 SQL 的总时间约为十分之二。数据库是postgresql。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/opt/django/myproj/log/debug.log',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

我还尝试禁用USE_I18N并从管理员中删除@never_cache以防万一,但没有任何改变。

有人对我的服务器可能发生的事情有任何建议吗?

谢谢!

我的上下文处理器:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'django.core.context_processors.request',
    'django.core.context_processors.i18n'
)
4

2 回答 2

3

我希望 SQL 的总时间小于 1 秒。如果不是,是否有很多 SQL 查询?对于像您描述的那样的管理视图,您应该查看少于 10 个 SQL 查询。

SQL 查询的数量会产生很大的影响,因为 Django 必须构建它们并构建结果集,而这个时间不包括在 SQL 查询给定的时间中。

您应该添加 django-debug-toolbar 并查看是否提供了一些线索。

其他缓慢的来源:

  • 缓慢的上下文处理器(例如,执行大量数据库查询),并且因为它们在全局TEMPLATE_CONTEXT_PROCESSORS设置中而被执行。一种解决方案是删除它们并仅将它们添加到需要它们的视图中,或者使用惰性,以便除非需要,否则它们实际上不会被评估。

  • 正在添加到 HTML 页面头部并且加载缓慢的内容。使用浏览器网络调试器检查

  • 其他服务器端。使用Python 分析来确定时间花费在哪里。

于 2015-01-26T07:28:23.683 回答
1

最后问题出在服务器中运行的进程占用了 98% 的 CPU。所以与 django 无关,但以防万一这对任何人都有帮助。

于 2015-01-28T07:11:04.710 回答