`
ice_cube
  • 浏览: 24161 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

让django/mod_python内存使用降低的一些建议

阅读更多
最近用django+apache+mod_python搭建的一在线元器件交易平台网站(http://www.ecgoo.net/),由于网络爬虫的频繁光顾,导致经常有httpd进程狂吃内存,网站无法访问。

google了一下,发现有篇英文文档很有帮助,因此翻译了下,希望对他人有帮助

原文:http://blog.webfaction.com/tips-to-keep-your-django-mod-python-memory-usage-down#

当你的djano项目部署在Apache + mod_python之上时,你可以使用下面的建议来让服务器内存使用降低

1.确保settings.py中DEBUG设置为False
如果没有,将他设置为False。因为,在DEBUG模式下,所有的SQL查询都会被保存在内存中,这样会使你的内存迅速增加
补:apache同样也有个Debug的设置,而且他优先于django的DEBUG=False,因此,仅管django中DEBUG=False,apache中的Python Debug On也会消耗大量内存。

2.在apache配置中使用ServerLimit
默认情况下,Apache将产生大量进程,导致内存的大量使用。您可以使用“ServerLimit”命令来限制这些进程。

3.确保没有大的对象加载入内存
例如:检查你的代码,确保没有一次加载数千条记录到内存的情况。同时,如果你的网站能够让用户下载或上传大文件,也确保这些大文件没有加载入内存

4.让你的主服务器直接服务静态数据
对于django网站来说,这是一条普遍建议,让你的静态数据(images,css...)直接由apache主服务器服务,这将让你的django应用程序节省一点额外的请求。

5.在apache配置中使用MaxRequestsPerChild
有的时候会出现一些内存泄漏的问题,如果是这样的话,我们可以通过使用MaxRequestsPerChild来告诉apache在服务一定数量的请求之后,将杀死改进程,并重新启动一个新进程。一般设置在100到1000之间.
当然还有一种更极端丑陋的做法,就是用crontab来定时重启apache

6.找出你的内存使用量
你能够使用“ps -u <username> -o pid,rss,command“命令来查看运行的进程以及内存使用情况,如
  [testweb14@web14 bin]$ ps -u testweb14 -o pid,rss,command 
  PID RSS COMMAND 
  23111 1404 -bash 
  27988 3848 httpd.c 
  27989 10312 httpd.c
  27990 9804 httpd.c 
  28078 760 ps -u testweb14 -o pid,rss,command 
  [testweb14@web14 bin]$

正如你可以看到的,我们有三个“的httpd”进程在运行,内存使用分别3848KB,10312KB和9804KB。第一个是apache监督进程,另外两个工作进程(在这个例子,“ServerLimit”设置为2)。监督进程的内存使用一般不会有很大改变,但如果你的应用程序有内存泄漏,工作进程内存的使用可以大大增加。因此,在这个实例中,apache/Django总共使用的内存为3848KB + 9804KB + 10312KB = 23MB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics