Django管理员正在以极慢的速度加载页面

时间:2015-01-26 07:13:17

标签: python django postgresql gunicorn django-suit

我有一个django应用程序,在 gunicorn 服务器上运行django套装,并且需要花费大量时间来加载管理员的每个页面(列表和编辑视图)。具有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'
)

2 个答案:

答案 0 :(得分:3)

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

SQL查询的数量可能会产生很大影响,因为Django必须构造它们并构建结果集,并且这次不包含在SQL查询的时间内。

你应该添加django-debug-toolbar,看看是否提供了一些线索。

其他缓慢的来源:

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

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

  • 服务器端的其他东西。使用Python profiling计算出花费的时间。

答案 1 :(得分:1)

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