为什么我的django/psql站点速度如此之慢?

为什么我的django/psql站点速度如此之慢?,django,apache,postgresql,apache2,mod-wsgi,Django,Apache,Postgresql,Apache2,Mod Wsgi,我有一个django网站,它只有一个管理界面,因为它是一个内部的东西 简单的页面几乎可以立即加载,比如说一个包含10个项目的表 但是一个包含大量内联线等内容的页面需要5-10秒才能加载,有时甚至更长。它几乎不能用了 这绝对不是一个庞大的数据库。我有几十个模型,没有一个表有超过500个条目 在最新的四核Xeon上运行Ubuntu10.04,内存为12GB 生产服务器(mod_wsgi)和开发服务器都会出现问题。生产服务器通常更糟,但两者都非常慢 在延迟期间,apache(如果我使用的是生产服务器)

我有一个django网站,它只有一个管理界面,因为它是一个内部的东西

简单的页面几乎可以立即加载,比如说一个包含10个项目的表

但是一个包含大量内联线等内容的页面需要5-10秒才能加载,有时甚至更长。它几乎不能用了

这绝对不是一个庞大的数据库。我有几十个模型,没有一个表有超过500个条目

在最新的四核Xeon上运行Ubuntu10.04,内存为12GB

生产服务器(mod_wsgi)和开发服务器都会出现问题。生产服务器通常更糟,但两者都非常慢

在延迟期间,apache(如果我使用的是生产服务器)或python(如果我使用的是开发服务器)的一个CPU核心达到最大值

我尝试过使用WSGIDaemonProcess,更改线程和进程的数量,但没有效果

下面是我的apache配置文件,但正如我所说,我的dev服务器也有问题,所以这可能不是apache的问题

谢谢你的帮助。对于术语等的不当使用表示歉意。我是一名C和MATLAB程序员,对服务器、网络、数据库或python不太了解。此外,我确实意识到有几个关于django缓慢响应的线程,我已经阅读了所有这些线程,但我没有发现任何有助于我的情况的线程。谢谢

WSGIDaemonProcess MY_ACTUAL_IP_ADDRESS user=MY_USERNAME group=MY_USERNAME threads=4
WSGIProcessGroup MY_ACTUAL_IP_ADDRESS

WSGIScriptAlias /wsgi /neuroling/projects/neuroxy/neuroxy_project/neuroxy.wsgi
<Directory /neuroling/projects/neuroxy/neuroxy_project/>
  Order allow,deny
  Allow from all
</Directory>

Alias /media/ /var/www/media/
Alias /static/ /var/www/static/

<Directory /var/www/static>
Order deny,allow
Allow from all
</Directory>

<Directory /var/www/media>
Order deny,allow
Allow from all
</Directory>
WSGIDaemonProcess MY_ACTUAL_IP_ADDRESS user=MY_USERNAME group=MY_USERNAME threads=4
WSGIProcessGroup我的实际IP地址
WSGIScriptAlias/wsgi/neuroling/projects/neuroxy/neuroxy_project/neuroxy.wsgi
命令允许,拒绝
通融
别名/media//var/www/media/
别名/static//var/www/static/
命令拒绝,允许
通融
命令拒绝,允许
通融

您是否尝试使用Django调试工具栏来隔离慢点

您还可以使用生产应用程序性能监视工具,如New Relic


New Relic有两周的试用期,所有功能都可用。在此期间,充分利用性能细分和慢速事务跟踪功能来解决问题。两周后,它将下降到免费订阅功能级别,您将失去缓慢的事务跟踪,但仍会有针对web事务的性能故障。

您是否尝试过Django debug toolbar来尝试隔离缓慢的点

您还可以使用生产应用程序性能监视工具,如New Relic


New Relic有两周的试用期,所有功能都可用。在此期间,充分利用性能细分和慢速事务跟踪功能来解决问题。两周后,它将下降到免费订阅功能级别,您将失去缓慢的事务跟踪,但仍会有针对web事务的性能故障。

我现在已经解决了这个问题。我复制了一份数据库并删除了大部分数据,看看这是否会影响速度。事实上,它不再缓慢。这让我意识到问题出在数据库(或访问数据库)上,而不是apache之类的东西

于是,我打开了postgresql的日志记录并查看了日志。实际上,发送了数千条看似无关的奇怪SQL语句。仔细检查发现,他们都被派去填写一个包含数千条输入的外键选择框。在任何给定的情况下,实际上只有少数条目是可能的,但在django中筛选选择框似乎非常复杂,我还没有完成这项工作。但我所做的是将这些字段指定为原始id字段,这会阻止创建选择框。这完全解决了速度慢的问题


谢谢大家对我的问题提出建议。我希望这个答案能对其他人有所帮助。

我现在已经解决了这个问题。我复制了一份数据库并删除了大部分数据,看看这是否会影响速度。事实上,它不再缓慢。这让我意识到问题出在数据库(或访问数据库)上,而不是apache之类的东西

于是,我打开了postgresql的日志记录并查看了日志。实际上,发送了数千条看似无关的奇怪SQL语句。仔细检查发现,他们都被派去填写一个包含数千条输入的外键选择框。在任何给定的情况下,实际上只有少数条目是可能的,但在django中筛选选择框似乎非常复杂,我还没有完成这项工作。但我所做的是将这些字段指定为原始id字段,这会阻止创建选择框。这完全解决了速度慢的问题


谢谢大家对我的问题提出建议。我希望这个答案可能对其他人有所帮助。

你说的“大量内联线”是什么意思?另外,尝试打开页面,将内容(Ctrl+S)保存为桌面上的HTML文件,然后从桌面重新打开。如果它仍然很慢,那就是浏览器,如果它很快,那就是服务器,我们可以进一步调查。我敢肯定,如果CPU陷入困境,这是服务器的问题,但我要绝对肯定的是,在最慢的页面类型上,有六个内联线,其中通常有零到两个条目。但在另一个同样需要几秒钟才能加载的页面上,只有一个内联页面,通常有大约10个条目。我按照你的建议保存了这个网页,然后可以用FireFox立即打开它。是的,这是服务器,不是浏览器。谢谢你的帮助!尝试发布至少一些将上下文发送回模板的视图代码。可能有一些嵌入式循环或其他抛物线代码序列。只要确保里面没有机密信息就行了。我真的没有写一行代码。我只是在用admi