重新启动或不活动期间后,Django 站点加载速度非常慢
Posted
技术标签:
【中文标题】重新启动或不活动期间后,Django 站点加载速度非常慢【英文标题】:Django site very slow to load after restart or period of inactivity 【发布时间】:2011-10-29 00:17:39 【问题描述】:我在 Apache 上运行一个 Django 站点,并且在一段时间不活动(大约 1 小时)后,初始页面加载速度非常慢。我可以通过离开一个小时或弹跳服务器来复制。初始加载后,页面会在
我假设(猜测)问题是 Python 解释器 + Python 模块在这些不活动期之后再次被加载到内存中?
我已关注http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html,并且正在以守护程序模式运行 mod_wsgi。
服务器配置:
Timeout 20
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
ServerLimit 10
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 2
MaxClients 4
MaxRequestsPerChild 0
</IfModule>
...
WSGIDaemonProcess django display-name=%GROUP
WSGIScriptAlias / /path/to/osqa.wsgi process-group=django application-group=%GLOBAL
上面的配置明显有问题,或者有没有办法将 Python 解释器保留在内存中?
也许这是一个完全不同的问题?
谢谢
【问题讨论】:
你能发布运行'top'命令的输出吗?您可以发布 error_log.txt 文件的输出吗?如果在等待大约一个小时后问题可以重现,您应该这样做并根据您的操作系统运行“ps -C python”来查看python是否实际上仍在运行。如果没有更多症状/信息,很难诊断问题。 您是否在使用缓存(memcached ..),因为可能只是现在您的网站已关闭缓存已清除,而您现在观察到的是正常的页面加载 w/o缓存,您之前试验的速度是因为缓存优化?!您可以通过(在您的网站恢复正常后)清除缓存(不关闭您的网站)并查看差异来知道我的假设是否正确,当然,如果您从一开始就使用缓存框架: ) 凯文。这无济于事,因为在 mod_wsgi 下,'python' 可执行文件不会直接运行来做事。因为他们使用了 display-name 选项,所以使用链接 Python 解释器的 mod_wsgi 守护进程实际上将被称为 '(wsgi:django)'。他们可以检查,但配置是这样的,它应该在那里。 您找到解决此问题的方法了吗?我也遇到了类似的问题 【参考方案1】:一些想法:
确保您有足够的内存,并且有一些可用且健康的磁盘缓存。根据您的操作,您应该至少有 1gb 到 4+gb。提到了top,我推荐htop:http://htop.sourceforge.net/ 增加磁盘缓存,例如,如果您使用的是 IO 较差的 VM,例如 EC2/EBS。 将您的数据库调整为与内存相关的适当值。 如果如上所述缓存检查超时。如果没有人在小时内访问缓存将过期。 将 Linux (?) 配置为不那么积极地交换: echo 20 > /proc/sys/vm/swappiness 永久:在 /etc/sysctl.conf 中添加 vm.swappiness【讨论】:
以上是关于重新启动或不活动期间后,Django 站点加载速度非常慢的主要内容,如果未能解决你的问题,请参考以下文章
Django:重新启动后出现“没有名为 context_processors 的模块”错误