如何解决Python2的内存泄漏问题
来源:互联网 发布:fedora与ubuntu 编辑:程序博客网 时间:2024/05/19 11:44
python进程内存撑大了下不去,只能手动重启释放内存,这么坑爹的事情你遇到过吗?哪家内存分配器强?结果一目了然。
线上进程目前都是使用原生的Python内存分配器(pymalloc),在正常的情况下表现还算稳定,但如果来了一波类似于武神坛或者天下第一的比武大会,为手机瞬间带来了10倍于平时的流量,一阵狂虐之后,Python进程占用的内存被撑大就下不去了。关于Python的内存不释放问题,可以参考一下这两篇文章:python内存不释放原理,Python memory management and TCMalloc。
为了解决内存泄漏的问题,我专门使用了三种编译方式去编译Python2.7解释器
以下分别使用pymalloc、without-pymalloc、tcmalloc测试1千万个object的list内存释放情况(注:默认使用Python2.7)。
- 测试环境
- 测试代码
#!/usr/bin/env python# coding: utf-8import osimport gcimport timeclass Test: def __init__(self): self.name = "haha"def run(): L = [] begin = time.time() for i in xrange(10000000): L.append(Test()) end = time.time() print 'cost:%s' %(round(end-begin,3)) input_str = raw_input('\nrun: ')if __name__=="__main__": print "pid:%s" %os.getpid() input_str = raw_input('\nstart') run() input_str = raw_input('\nready to collect') gc.collect() input_str = raw_input('\ncollected.')
- 测试结果
结论
pymalloc在一轮暴虐之后进程内存下不去。不使用pymalloc容易导致不少兼容性的问题出现,而且许多python的新feature会用不了,不建议这么做。
而tcmalloc果然名不虚传,run方法结束后,内存马上释放到解放前。建议生产环境尝试使用tcmalloc编译的Python解释器,其它兼容性的问题有待考证。
0 0
- 如何解决Python2的内存泄漏问题
- 如何解决MVP内存泄漏的问题
- 内存泄漏问题如何解决
- Android 如何有效的解决内存泄漏的问题
- Android 如何有效的解决内存泄漏的问题
- Android 如何有效的解决内存泄漏的问题
- 内存泄漏的问题如何解决(linux)
- 内存泄漏的问题如何解决(linux)
- 解决内存泄漏问题
- 最近解决的一个内存泄漏问题
- 解决javascript的内存泄漏问题
- Android webview内存泄漏问题的解决
- 如何解决new了之后因为执行流跳转而导致的内存泄漏的问题
- 如何解决IE内存泄漏
- 如何解决afnetworking内存泄漏
- 解决 X264 内存泄漏问题
- 解决 X264 内存泄漏问题
- 解决webview内存泄漏问题
- JVM指令字符集
- __func__标识符
- linux 命令系列之 基于xinetd服务(66)
- DSP程序汇编级优化
- Duilib编译成静态库
- 如何解决Python2的内存泄漏问题
- __VA_ARGS__用法(转)
- softwave
- 【机房重构】SQLHelper
- 错误信息:Warning Cannot modify header information - headers already sent by 的解决方法fi
- [hdu] CUP
- struts2重写request的方法引发的问题!(加不加#号问题)
- 我工作中所遇到的业务总结(一)
- Java集合框架——集合框架概况