zoukankan      html  css  js  c++  java
  • python内存泄漏

    记录: 一个脚本在连续运行后,使用内存越来越大,在循环后手动添加gc.collect()没有作用。

    尝试方法:

    去除所有函数中当作参数传入的全局变量

    使用全局redis对象,不再当作参数传入

    循环末尾使用del显式删除变量循环中生成的变量,然后调用gc.collect()

    主函数结尾删除函数中使用的变量,怀疑这写部分有可能循环引用。

    update: 还是有内存泄漏,尝试将所有的语句尽可能封装在函数中,函数执行完成后,变量会回收。

    --没解决问题 删除了一个igetui的全局的class,每次调用时再创建,使用完删除,观察。

    update again: 使用objgraph在主函数开始和结束的时候objgraph.show_growth() 发现tuple在每次运行结束之后都会增加,逐个检查主函数中的子函数,发现tuple增加很可能是由于数据库操作函数引起,查看函数运行时输出,发现数据库操作的时候有警告,"Warning: Truncated incorrect time value: ",怀疑可能时在这个时候抛出警告引起了内存泄漏,查看警告个数和增加的tuple个数相差无几,于是修改sql,之后再次用objgraph.show_growth()查看,函数运行两次后,不再有tuple增加,观察一段时间,memory使用稳定。

    ref:

    https://stackoverflow.com/questions/2017381/is-it-possible-to-have-an-actual-memory-leak-in-python-because-of-your-code

    https://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python

    https://stackoverflow.com/questions/1641717/manual-garbage-collection-in-python

    http://www.cnblogs.com/xybaby/p/7491656.html

  • 相关阅读:
    java 实现一段文字中,出现次数最多的字
    json 字符串 <----> json 对象
    农场销售
    IDEA Tomcat配置 VM Option
    java用JSONObject生成json
    面向对象
    java读取 properties配置文件
    Jquery span标签的取值赋值
    Oracle 分析函数 over
    gitee指令集合
  • 原文地址:https://www.cnblogs.com/buxizhizhoum/p/7486188.html
Copyright © 2011-2022 走看看