gpt4 book ai didi

python - 调试 Python 内存碎片

转载 作者:行者123 更新时间:2023-12-03 14:53:41 25 4
gpt4 key购买 nike

我有一个长期运行的 CPython 3.8 进程。一段时间后,它使用了大量的 RAM。
我试过了

  • 运行 gc.collect()
  • 使用 pympler 发现所有已知的 Python 对象

  • import gc
    import psutil
    from pympler import muppy, summarize

    gc.collect()
    total_ram = psutil.Process().memory_info().rss
    all_objects = muppy.get_objects(include_frames=True)
    s = summary.summarize(all_objects)
    python_objects_size = sum(row[2] for row in s)

    输出:102 MiB Python 对象,824 MiB RSS 内存!

    [编辑] 3. 使用 tracemalloc;它还返回值(value)约 100MiB 的 python 对象

    [编辑 2] export PYTHONMALLOC=malloc不能解决问题。

    有没有办法查询 CPython 内存管理器来弄清楚
  • 它拥有多少 RAM,这样我就可以从 RSS 中减去它,并确定是否有任何 C 库不使用 PyMem_Malloc 并且正在泄漏
  • 为什么它持有内存(例如,发现它持有一个 64kb 页面,因为仍然被引用的单个 20 字节 PyObject)
  • 识别调用 PyMem_Malloc 之后从未释放内存的 C 模块
  • 跟踪操作系统级别的 malloc() 和 free() 并将它们与 pymalloc 执行的进行交叉比较,以确定是否有一个 C 库正在分配内存而不是 PyMem_Malloc

  • 有关的
  • Calculating memory fragmentation in Python (2012;同样的问题,但从未回答)
  • Does CPython's garbage collection do compaction? (答案:否)
  • 最佳答案

    也许尝试不同的内存调试器。可以使用valgrind与 python 。

    关于python - 调试 Python 内存碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61638592/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com