本篇文章为大家展示了Python 程序的内存泄露该怎么解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
如果大家在 Linux 或者 macOS 下面运行一段可能导致内存泄露的程序,那么你可能会看到下面这样的情况:
而如果你用的系统是 Windows,那么可能电脑直接就卡死了。
但是,调试这种 OOM(Out of Memory)的问题有时候是非常困难的,因为你不知道代码哪个地方会导致内存泄露。但是如果你运行程序进行调试,程序又会中途被杀掉或者直接卡死系统。
如果我们有办法看到程序里面每一个函数占用的内存大小,那么我们就能缩小检查的范围。
为了实现这个目的,我们可以安装并使用一个叫做filprofiler
的第三方库,它可以分析 Python 程序的内存占用情况。
我们先安装这个库:
pip install filprofiler
然后写一段会导致内存泄露的代码:
def func_a():
print('我是一个正常的函数')
def func_b():
print('我是第二个正常的函数')
def func_b():
print('我是第三个正常的函数')
def func_oom():
print('我是一个会导致内存泄露的函数')
datas = []
while True:
datas.append('s' * 1024 * 1024)
print('运行程序的时候,你不会看到这一行')
def run():
func_a()
func_b()
func_oom()
run()
这段程序直接运行会因为内存泄露的问题被系统直接杀死。
在使用 filprofiler 之前,还需要调整一下虚拟内存的大小;否则,filprofiler 本身也会因为占用内存过大的问题而被系统杀掉。
先使用free
命令看一下系统可用的内存有多少:
我们使用ulimit
命令,把程序能够使用的内存稍稍调低一些,这样即使被占满,也不会被系统杀死:
ulimit -Sv 1600000
然后,使用 filprofiler 来运行这个程序:
fil-profile run test.py
运行效果如下图所示:
filprofiler 会在当前文件夹下面生成一个fil-result
文件夹,在里面会有一个以时间命名的文件夹,文件夹中会有两个svg
文件,如下图所示:
我们使用浏览器打开其中的out-of-memory.svg
文件,可以看到如下图所示的内存占用图:
从图中可以看到,占用内存最大的函数是func_oom
,程序也是在这个地方崩溃的。
上述内容就是Python 程序的内存泄露该怎么解决,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。