• Python-tracemalloc-跟踪内存分配


    tracemalloc 模块是一个用于对 python 已申请的内存块进行debug的工具。它能提供以下信息:

    • 定位对象分配内存的位置

    • 文件、按行统计python的内存块分配情况: 总大小、块的数量以及块平均大小。

    • 对比两个内存快照的差异,以便排查内存泄漏

    显示前10项

    显示内存分配最多的10个文件:

    1. import tracemalloc
    2. tracemalloc.start()
    3. # --- 业务代码 start ---
    4. n = 10000000
    5. s = 0
    6. for i in range(1, n):
    7. s *= i
    8. # --- 业务代码 end ---
    9. snapshot = tracemalloc.take_snapshot() # 内存摄像
    10. top_stats = snapshot.statistics('lineno') # 内存占用数据获取
    11. print('[Top 10]')
    12. for stat in top_stats[:10]: # 打印占用内存最大的10个子进程
    13. print(stat)
    14. # [Top 10]
    15. # D:/MyPython/tracemalloc/demo.py:5: size=576 B, count=1, average=576 B
    16. # D:/MyPython/tracemalloc/demo.py:7: size=28 B, count=1, average=28 B

     TOP1:代码第五行占用内存大小576B

     计算差异

    获取两个快照并显示差异:

    1. import tracemalloc
    2. tracemalloc.start()
    3. snapshot0 = tracemalloc.take_snapshot() # 第一张快照
    4. # --- 业务代码 start ---
    5. n = 10000000
    6. s = 0
    7. for i in range(1, n):
    8. s *= i
    9. # --- 业务代码 end ---
    10. snapshot1 = tracemalloc.take_snapshot() # 第二张快照
    11. top_stats = snapshot1.compare_to(snapshot0, 'lineno') # 快照对比
    12. print('[Top 10 differences]')
    13. for stat in top_stats[:10]:
    14. print(stat)
    15. # [Top 10 differences]
    16. # D:/MyPython/tracemalloc/demo.py:27: size=576 B (+576 B), count=1 (+1), average=576 B
    17. # D:\Program Files\anaconda3\lib\tracemalloc.py:397: size=88 B (+88 B), count=2 (+2), average=44 B
    18. # D:\Program Files\anaconda3\lib\tracemalloc.py:534: size=48 B (+48 B), count=1 (+1), average=48 B
    19. # D:\Program Files\anaconda3\lib\tracemalloc.py:291: size=40 B (+40 B), count=1 (+1), average=40 B
    20. # D:/MyPython/tracemalloc/demo.py:31: size=28 B (+28 B), count=1 (+1), average=28 B

     TOP1:代码第27行占用内存大小增加了576B


    参考: 

    tracemalloc --- 跟踪内存分配 — Python 3.7.13 文档
    https://docs.python.org/zh-cn/3.7/library/tracemalloc.html#module-tracemalloc

    python3使用tracemalloc追踪mmap内存变化 - DECHIN - 博客园
    https://www.cnblogs.com/dechinphy/p/mmap.html

  • 相关阅读:
    jenkins声明式流水线pipline深入学习
    应用案例|基于高精度三维机器视觉的检测汽车座椅应用
    【SpringCloud】API网关(Spring Cloud Gateway)
    西邮计科嵌入式复习
    Cookie、Session和Token三者区别以及各自应用场景
    Linux学习之进程一
    计算机网络自顶向下前一章知识点回顾
    学习Python第一天 ---Hello World
    【会议分享】2022年第四届大数据、物联网与计算国际会议(ICBICC 2022)
    求职刷题力扣DAY14 ---二叉树的基础遍历,迭代、递归
  • 原文地址:https://blog.csdn.net/qq_19446965/article/details/132796799