• python内存增长问题


    如果你的程序没有调用什么特殊的库,

    只是用了很平常的库,

    而且使再循环很多的情况下,

    那么建议你把循环里的程序拆出来,写成一子函数,循环子函数。

    如下面格式:

    for   (循环)

        子函数

     这样程序每次循环的是子函数然后循环完子函数程序会自动搜集所有的子函数变量,

    这样保证了每次循环的残留最小。

    如果还是不行,下面是我搜集的一些资料。

    python升级到2.7.13
    函数执行的结尾加上这个即可
    for x in locals().keys():
         del locals()[x]
    gc.collect()

    原理是,locals()会列出当前所有局部变量,手动的把当前函数生成的开销都给清空掉即可释放掉内存。
    ---------------------
    作者:田有权
    来源:CSDN
    原文:https://blog.csdn.net/u011060852/article/details/78183373

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    https://blog.csdn.net/nirendao/article/details/44426201/

    以上说明,当调用del时,其实Python并不会真正release内存,而是将其继续放在其内存池中;只有在显式调用gc.collect()时,才会真正release内存。

    del locals()[x]
    gc.collect()

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    https://blog.csdn.net/kelindame/article/details/73008487

    三、初次分析
    使用python开发程序,内存泄露的几个基本原因:
    1、存在循环引用,gc不能释放;
    2、存在全局对象,该对象不断的变大,占据内存;
    3、使用了c或者c++扩展,扩展内存溢出了;
     
    四、二次分析
    第一分析无果,然后当时没想到什么方法。只能暴力,注释一部分代码进行排查。发现注释掉将消息发送给业务服务的代码,内存不会持续增长。
    怀疑是不是requests库的问题。然后进行google:requests memory leak,发现还真有这个问题。地址:https://github.com/requests/requests/issues/1685
    他们的讨论非常精彩。不过上面的讨论是在pypy下,requests出现内存泄露。而我用的Cpython。而且后面的pypy版本也已经修复了这个bug。不过当时不信邪,
    还是认为requests库有问题,所以改换成python3的urllib去发送信息,发现结果还是一样。然后网上一查,特么requests底层是封装url库的。已哭晕在厕所。

     
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    http://www.cnblogs.com/Xjng/p/5128269.html
     
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    https://segmentfault.com/q/1010000006089116
    python 的list是有最大长度的(我的python最大长度在180000000到190000000之间).
    你的代码里三层循环,有将近10^9个元素,放不下就报这个错了.
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    https://www.jb51.net/article/64745.htm

    项目中两种情况导致对象没有被正确回收:

    被退出才回收的对象引用

    交叉引用

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    http://blog.sina.com.cn/s/blog_a046022d0101esu2.html

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_603days_1.html

    https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_603days_1.html

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    安装memory_profiler库

    https://www.cnblogs.com/kaituorensheng/p/5669861.html

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
     
  • 相关阅读:
    [个人]工作中的死亡陷阱
    [阮一峰]在软件开发中,一旦这些技术被取代,你的知识将变得毫无价值,因为它们大部分都是实施的细节。
    [原文 + 补充] 当你在浏览器中输入Google.com并且按下回车之后发生了什么?
    安全的知识点总结
    purge旧的ubuntu 的linux内核
    【个人】运维常识
    windows数字证书管理器
    在mobaxterm内连接deb使用lrzsz进行文件传输
    网络安全常见考试题
    linux deb系 rpm系 配置路由
  • 原文地址:https://www.cnblogs.com/chulin/p/9908285.html
Copyright © 2020-2023  润新知