文章目录

  • 1. 问题描述
  • 2. 问题排查
  • 3. 参考

1. 问题描述

  1. 在运行程序是,通过要进行压力测试,在程序的各项性能稳定时才可以进行上线,其中主要的性能指标包含cup,内存,显存,这里遇到的问题就是内存不断飙升的问题,在程序中手动加入del删除变量,在接口处执行gc.collect()进行手动的内存回收,并且加入torch.cuda.empty_cache()清除gpu的显存。压测了一个多小时,发现内存已经相对稳定了,就想着进行服务的上线。
  2. 实际上这种方式只是缓解了内存爆炸的速度而已,抱着侥幸心理不去找到内存泄漏的点的话,线上服务也会早晚出问题。
    实际上另一个坑正在慢慢的酝酿,通过单独测试gc.collect()指令,发现程序在压测20分钟后,仅仅执行gc.collect()这一条指令,就使用了整整10s的时间!!太恐怖了,后面就想到了定时执行gc.collect(),在内存和时间上进行折中,实际上这种方式还是没有真正的解决问题。
  3. 不出所料,在上线后的第一晚上服务就挂了,凌晨四点进行的报警。


    每一个小时进行内存的监控,内存泄漏的问题正在一点一点的榨干服务器的内存空间,直到服务挂掉。

2. 问题排查

最难的可能就是进行内存泄漏点的排查了,百度加谷歌都尝试了一下pytorch内存泄漏,大概掌握了一下情况,后来使用了内存分析的火焰图cProfile和memory profiler,使用memory profiler这种装饰器的方式真的是香,将每一行的代码都进行了内存的分析,最终定位了内存泄漏的代码段。

3. 参考

  1. 使用 cProfile 和火焰图调优 Python 程序性能
  2. 记一次Pytorch内存泄露的排查与处理
  3. python内存诊断工具pympler
  4. pytorch内存泄漏分析案例 | list转tensor

Pytorch内存泄漏Memory Leak相关推荐

  1. Windows程序内存泄漏(Memory Leak)分析之UMDH

    小木发现线上的程序通过任务管理器发现内存不断的增长,怀疑是不是内存泄漏呢?用户态内存泄漏可能是句柄泄漏,堆内存泄露,Socket, GDI对象等等.而对于C++程序员来说,碰到最多的无疑是堆内存泄露: ...

  2. Windows程序内存泄漏(Memory Leak)分析之Windbg

    一.背景 近期有一个项目在运行当中出现一些问题,程序顺利启动,但是观察一阵子后发现内存使用总量在很缓慢地升高, 虽然偶尔还会往下降一些,但是总体还是不断上升:内存运行6个小时候从33M上升到80M: ...

  3. Android 内存管理 Memory Leak OOM 分析

    转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...

  4. android内存溢出和内存泄漏的区别,Android 内存溢出和内存泄漏以及Leak Canary的使用...

    一.内存泄漏和内存溢出的区别 内存溢出 out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才 ...

  5. SQL Server 内存泄露(memory leak)——游标导致的内存问题

    原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...

  6. 性能优化之内存泄露(Memory Leak)常用分析工具(另3种)

    1 LeakCanary(最常用,能监控整个App内存泄漏情况) 1.1 使用LeakCanary // 仅在debug包启用LeakCanary debugImplementation 'com.s ...

  7. 什么是内存溢出(Out Of Memory---OOM)和内存泄露 (Memory Leak)

    1.内存溢出:(Out Of Memory---OOM) 系统已经不能再分配出你所需要的空间,比如系统现在只有1G的空间,但是你偏偏要2个G空间,这就叫内存溢出 例子:一个盘子用尽各种方法只能装4个果 ...

  8. 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别

    内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态 内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数 ...

  9. python内存泄露memory leak排查记录

    问题描述 A服务,是一个检测MGR集群主节点是否发生变化的服务,使用python语言实现的. 针对每个集群,主线程会创建一个子线程,并由子线程去检测.子线程会频繁的创建和销毁. 上线以后,由于经常会有 ...

最新文章

  1. 硬核艿艿,新鲜出炉,直接带你弄懂 Spring Boot Jar 启动原理!
  2. [转载]DB2数据库移植罕见成绩片面理睬(4)
  3. Caffe: Caffe的Python接口
  4. php7 ast,PHP7 的抽象语法树(AST)带来的变化
  5. 武汉音乐学院计算机音乐,武汉音乐学院
  6. 爬虫:python爬虫学习笔记之网站保持登录机制及简单验证码处理
  7. python词云图生成简单实用
  8. 曙光计算机能玩游戏吗,曙光英雄怎么在电脑上玩 用模拟器玩曙光英雄电脑版...
  9. 搜集百度关键词的相关网站、生成词云
  10. 苹果鼠标怎么充电_macbook pro搭配什么鼠标好?
  11. access 调用 webbrowser_函数调用过程与栈帧结构 - wuli涛涛
  12. 彻底卸载360安全卫士的方法
  13. Phoenix错误信息: Malformed connection url
  14. window10 无法使用内置管理员账户打开sticky notes 解决方法
  15. lay-verify的失效情况
  16. 高洛峰mysql_【干货】MySQL 安装与安全优化
  17. 七张图,学会做有价值的经营分析
  18. Netflix 文化
  19. 下位机和上位机通信 学习体会心得
  20. Anaconda安装Jupyter Notebook的常用方法(安装失败解决方法)

热门文章

  1. Android使用七牛实现录像加时间水印和拍照(截帧回调)
  2. 【LeetCode】复数乘法
  3. 冷风骑车与贝多芬的命运交响曲
  4. CSharp中的集合与字典:不同数据量的内存占用情况
  5. Linux编译x86架构内核出现_stack_chk_guard未定义错误
  6. SAP采购订单控制价格是否可以修改增强 LV69AFZZ
  7. 过孔----通孔,盲孔,埋孔
  8. Win11宽带连接错误651怎么解决?
  9. javaSE基础重点知识点总结 持续更新
  10. SaaSBase:什么是石墨文档?