Django网站重启或长时间不活动后加载缓慢

6 投票
1 回答
2095 浏览
提问于 2025-04-16 23:47

我在用Apache运行一个Django网站,发现如果一段时间没有活动(大约1小时),初次加载页面时会非常慢。我可以通过离开一个小时或者重启服务器来重现这个问题。初次加载后,页面加载速度就很快,通常在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解释器一直保持在内存里?

也许这根本就是另一个问题?

谢谢

1 个回答

0

这里有几个建议:

  • 确保你的电脑有足够的内存,并且有一些空闲的磁盘缓存。根据你在做什么,至少需要1GB到4GB以上的总内存。有人提到过使用top命令,我推荐使用htop:http://htop.sourceforge.net/
  • 如果你在使用像EC2/EBS这样的IO性能较差的虚拟机,可以考虑增加磁盘缓存。
  • 根据内存情况,调整你的数据库设置到合适的值。
  • 如果使用缓存,要检查超时设置。比如,如果一个小时内没有人访问,缓存就会过期。
  • 配置Linux系统,让它减少交换内存的频率:
    • 可以用命令:echo 20 > /proc/sys/vm/swappiness
    • 如果想永久生效,可以在/etc/sysctl.conf文件中添加vm.swappiness。

撰写回答