Pytorch内存泄漏Memory Leak
文章目录
- 1. 问题描述
- 2. 问题排查
- 3. 参考
1. 问题描述
- 在运行程序是,通过要进行压力测试,在程序的各项性能稳定时才可以进行上线,其中主要的性能指标包含cup,内存,显存,这里遇到的问题就是内存不断飙升的问题,在程序中手动加入del删除变量,在接口处执行gc.collect()进行手动的内存回收,并且加入torch.cuda.empty_cache()清除gpu的显存。压测了一个多小时,发现内存已经相对稳定了,就想着进行服务的上线。
- 实际上这种方式只是缓解了内存爆炸的速度而已,抱着侥幸心理不去找到内存泄漏的点的话,线上服务也会早晚出问题。
实际上另一个坑正在慢慢的酝酿,通过单独测试gc.collect()指令,发现程序在压测20分钟后,仅仅执行gc.collect()这一条指令,就使用了整整10s的时间!!太恐怖了,后面就想到了定时执行gc.collect(),在内存和时间上进行折中,实际上这种方式还是没有真正的解决问题。 - 不出所料,在上线后的第一晚上服务就挂了,凌晨四点进行的报警。
每一个小时进行内存的监控,内存泄漏的问题正在一点一点的榨干服务器的内存空间,直到服务挂掉。
2. 问题排查
最难的可能就是进行内存泄漏点的排查了,百度加谷歌都尝试了一下pytorch内存泄漏,大概掌握了一下情况,后来使用了内存分析的火焰图cProfile和memory profiler,使用memory profiler这种装饰器的方式真的是香,将每一行的代码都进行了内存的分析,最终定位了内存泄漏的代码段。
3. 参考
- 使用 cProfile 和火焰图调优 Python 程序性能
- 记一次Pytorch内存泄露的排查与处理
- python内存诊断工具pympler
- pytorch内存泄漏分析案例 | list转tensor
Pytorch内存泄漏Memory Leak相关推荐
- Windows程序内存泄漏(Memory Leak)分析之UMDH
小木发现线上的程序通过任务管理器发现内存不断的增长,怀疑是不是内存泄漏呢?用户态内存泄漏可能是句柄泄漏,堆内存泄露,Socket, GDI对象等等.而对于C++程序员来说,碰到最多的无疑是堆内存泄露: ...
- Windows程序内存泄漏(Memory Leak)分析之Windbg
一.背景 近期有一个项目在运行当中出现一些问题,程序顺利启动,但是观察一阵子后发现内存使用总量在很缓慢地升高, 虽然偶尔还会往下降一些,但是总体还是不断上升:内存运行6个小时候从33M上升到80M: ...
- Android 内存管理 Memory Leak OOM 分析
转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...
- android内存溢出和内存泄漏的区别,Android 内存溢出和内存泄漏以及Leak Canary的使用...
一.内存泄漏和内存溢出的区别 内存溢出 out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才 ...
- SQL Server 内存泄露(memory leak)——游标导致的内存问题
原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...
- 性能优化之内存泄露(Memory Leak)常用分析工具(另3种)
1 LeakCanary(最常用,能监控整个App内存泄漏情况) 1.1 使用LeakCanary // 仅在debug包启用LeakCanary debugImplementation 'com.s ...
- 什么是内存溢出(Out Of Memory---OOM)和内存泄露 (Memory Leak)
1.内存溢出:(Out Of Memory---OOM) 系统已经不能再分配出你所需要的空间,比如系统现在只有1G的空间,但是你偏偏要2个G空间,这就叫内存溢出 例子:一个盘子用尽各种方法只能装4个果 ...
- 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别
内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态 内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数 ...
- python内存泄露memory leak排查记录
问题描述 A服务,是一个检测MGR集群主节点是否发生变化的服务,使用python语言实现的. 针对每个集群,主线程会创建一个子线程,并由子线程去检测.子线程会频繁的创建和销毁. 上线以后,由于经常会有 ...
最新文章
- 硬核艿艿,新鲜出炉,直接带你弄懂 Spring Boot Jar 启动原理!
- [转载]DB2数据库移植罕见成绩片面理睬(4)
- Caffe: Caffe的Python接口
- php7 ast,PHP7 的抽象语法树(AST)带来的变化
- 武汉音乐学院计算机音乐,武汉音乐学院
- 爬虫:python爬虫学习笔记之网站保持登录机制及简单验证码处理
- python词云图生成简单实用
- 曙光计算机能玩游戏吗,曙光英雄怎么在电脑上玩 用模拟器玩曙光英雄电脑版...
- 搜集百度关键词的相关网站、生成词云
- 苹果鼠标怎么充电_macbook pro搭配什么鼠标好?
- access 调用 webbrowser_函数调用过程与栈帧结构 - wuli涛涛
- 彻底卸载360安全卫士的方法
- Phoenix错误信息: Malformed connection url
- window10 无法使用内置管理员账户打开sticky notes 解决方法
- lay-verify的失效情况
- 高洛峰mysql_【干货】MySQL 安装与安全优化
- 七张图,学会做有价值的经营分析
- Netflix 文化
- 下位机和上位机通信 学习体会心得
- Anaconda安装Jupyter Notebook的常用方法(安装失败解决方法)