重新启动或不活动期间后,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 的模块”错误

在搜索期间重新加载 UITableView

设备重新启动后,地理围栏是不是在 android 中保持活动状态

启动新意图后活动加载缓慢

Django Heroku,无法访问此站点,响应时间过长

在 Django 中的 ajax POST 期间被禁止(CSRF 令牌丢失或不正确。)