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