首页 > 解决方案 > Python 应用程序内存分析不准确

问题描述

我正在分析 Python 3 应用程序并试图了解内存的分配位置。

我尝试了多个库:

  1. pympler
  2. tracemalloc

皮勒代码:

all_objects = muppy.get_objects()
summary.summarize(all_objects)

Tracemalloc 代码:

current_snapshot = tracemalloc.take_snapshot()

total_size = 0
for stat in current_snapshot.statistics("filename"):
   total_size += stat.size

print(total_size)

这两个工具报告的内存比 Python 应用程序实际消耗的内存少 10 倍以上。该应用程序可以消耗超过 500 MB,而我在报告中得到了 50 MB 以下。

我正在手动检查内存使用情况并使用以下功能:

mem_usage = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

# resource.getrusage provides memory usage in bytes on OSX but in kilobytes for other platforms
if sys.platform != constants.PLATFORM_MAC:
   mem_usage *= 1024

return mem_usage

我在代码中调用gc.collect()之前的生成报告。

我使用gc库来查看应用程序是否泄漏了任何内存,但没有看到任何重要的东西。

有人可以解释为什么我能看到如此巨大的差异吗?

标签: pythonpython-3.x

解决方案


推荐阅读