为什么我的django / psql网站如此缓慢?

时间:2012-02-09 17:21:30

标签: django apache postgresql apache2 mod-wsgi

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

简单的页面几乎立即加载,比如说有10个项目的表格。

但是有大量内联等的页面需要5-10秒才能加载,有时甚至更长。它几乎无法使用。

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

在最近的具有12 GB RAM的四核Xeon上运行Ubuntu 10.04。

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

在延迟期间,一个CPU核心最大化apache(如果我正在使用生产服务器)或python(如果我正在使用开发服务器)。

我尝试过使用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>

2 个答案:

答案 0 :(得分:3)

我现在已经解决了这个问题。我制作了数据库的副本并删除了大部分数据,看看是否会影响速度。确实,它停止了缓慢。这让我想到这个问题是关于数据库(或访问它)的问题,而不是apache或类似的东西。

然后我打开登录postgresql并查看日志。实际上有数千个奇怪的SQL语句被发送似乎无关紧要。仔细检查发现他们都被送去填写一个包含数千个条目的ForeignKey选择框。在任何给定的情况下,实际上只有少数条目是可能的,但是在django中过滤选择框似乎真的很复杂,我还没有完成。但我所做的是将这些字段指定为raw_id_fields,这会阻止创建选择框。这完全解决了缓慢问题。

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

答案 1 :(得分:1)

您是否尝试过Django调试工具栏来尝试隔离慢点。

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

http://blog.newrelic.com/2011/11/08/new-relic-supports-python/

http://www.newrelic.com

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