我有一个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'
)
答案 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无关,但万一这会对任何人都有帮助。