设为首页 收藏本站
查看: 527|回复: 0

[经验分享] 让django/mod_python内存使用降低的一些建议

[复制链接]

尚未签到

发表于 2017-5-5 10:54:21 | 显示全部楼层 |阅读模式
最近用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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373370-1-1.html 上篇帖子: 用Python进行网页分析实现批量下载 下篇帖子: Python 中有 6 个正则表达式编译标志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表