Python 在Mod_WSGI中使用Django缓存

Python 在Mod_WSGI中使用Django缓存,python,django,performance,Python,Django,Performance,有人知道Django的缓存框架在部署到Apache/Mod_WSGI时有什么问题吗 使用评测中间件和FileBasedCache或LocMemCache,在dev服务器本地使用缓存框架进行测试时,Django的速度非常快。我的请求时间从~0.125秒到~0.001秒。太棒了 我将相同的代码部署到运行Apache/Mod_WSGI的远程机器上,请求时间从~0.155秒(部署更改前)到~0.400秒(部署后)。没错,缓存会减慢一切速度 我花了好几个小时在每件事中寻找我丢失的东西。我曾尝试在tmpfs

有人知道Django的缓存框架在部署到Apache/Mod_WSGI时有什么问题吗

使用评测中间件和FileBasedCache或LocMemCache,在dev服务器本地使用缓存框架进行测试时,Django的速度非常快。我的请求时间从~0.125秒到~0.001秒。太棒了

我将相同的代码部署到运行Apache/Mod_WSGI的远程机器上,请求时间从~0.155秒(部署更改前)到~0.400秒(部署后)。没错,缓存会减慢一切速度

我花了好几个小时在每件事中寻找我丢失的东西。我曾尝试在tmpfs上的某个位置使用FileBasedCache,但这也未能提高性能

我用top监控了远程机器,它没有显示其他进程,并且有6GB的可用内存,所以基本上Django应该有完全的控制。我喜欢Django,但它的速度非常慢,到目前为止,我还没有能够让缓存框架在生产环境中产生任何明显的影响。我有什么遗漏吗


编辑:我也尝试了memcached,结果是一样的。我通过远程登录确认memcached正在运行。

django确实很慢。但我必须说,大部分的缓慢来自应用程序本身。。django只是强迫您(在文档中提供了不好的示例)做一些在生产中很慢的事情

第一个:尝试nginx+uwsgi。这是最好的

要优化你的应用程序:你需要找到导致缓慢的原因,它可以是:

  • 慢速数据库查询(大量查询或只是慢速查询)
  • 数据库本身速度慢
  • 慢速文件系统(例如nfs)
尝试记录请求查询并观看iostat或iotop之类的东西


我在apache+mod_wsgi中遇到过这样的情况:来自浏览器的第一个请求非常慢。。。然后,来自同一浏览器的一些请求很快。。然后,如果坐着不做任何事情2分钟-我会非常慢。如果apache关闭wsgi应用程序并启动每个keepalive请求,我不知道它是否配置不当。它刚刚发布了我的消息-我安装了nging,使用nginx+fgxi,所有这些都比apache+mod_wsgi快得多。

我在使用memcached的应用程序中遇到了类似的问题。解决方案是在守护程序模式而不是嵌入式模式下运行mod_wsgi,在mpm_工作者模式下运行Apache。在这之后,应用程序的运行速度大大加快。

同样的事情也发生在我身上,我想知道是什么花了这么多时间。 每次缓存获取大约需要100毫秒

所以我调试了代码django-locmem代码,发现pickle花费了很多时间(我在locmemcache中缓存了整个表)。 我包装了locmem,因为我不想要任何高级的东西,所以即使你取出腌菜,解开并放好它。你会看到很大的进步


希望它对其他人有所帮助。

您使用什么进行缓存?如果您使用的是memcached,而memcached实际上没有运行,django不会告诉您,只是不会进行缓存。最好确保缓存确实发生了。您是使用prefork还是worker MPM for Apache?您是在嵌入式模式还是守护程序模式下运行mod_wsgi?您可能只是在错误的配置下运行Apache/mod_wsgi。当您应该使用mod_wsgi的守护程序模式时,您似乎犯了使用嵌入式模式的错误,最好是使用worker MPM。默认设置不能提供最佳解决方案。预加载Django应用程序也有帮助。uWSGI将预加载,但mod_wsgi延迟加载。你也可以让mod_wsgi预加载。不可否认,我有很多数据库查询,这会减慢速度。然而,在缓存到位的情况下,应该完全避免这些情况。我不确定我是否使用了mpm_工作模式,但我非常确定我在守护进程模式下使用了mod_wsgi。启用“我的站点”的文件具有WSGIDaemonProcess,其中进程=5,线程=15。