py-spy top --pid 255
tracemalloc.start() # 开启内存跟踪
def my_function():
data = [x for x in range(1000000)] # 生成大量数据
return data
my_function()
# 获取当前内存快照
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno') # 按行统计
print("[Top 10 内存占用最多的代码行]")
for stat in top_stats[:10]:
print(stat)
import tracemalloc
import sys
tracemalloc.start()
data = [x for x in range(1000000)]
print(f"变量 data 内存占用: {sys.getsizeof(data) / 1024:.2f} KB")
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
for stat in top_stats[:5]: # 仅显示前5个占用大的
print(stat)
tracemalloc.start()
def load_data():
data = [x for x in range(1000000)]
return data
snapshot1 = tracemalloc.take_snapshot() # 记录快照 1
data = load_data()
snapshot2 = tracemalloc.take_snapshot() # 记录快照 2
# 对比快照 stats = snapshot2.compare_to(snapshot1, ‘lineno’)
print("[内存增长最多的代码行]")
for stat in stats[:5]: # 仅显示前 5 个
print(stat)
import tracemalloc
tracemalloc.start()
def create_big_data():
return [x for x in range(1000000)]
def process_data():
data = create_big_data()
return [x * 2 for x in data]
process_data()
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('traceback') # 按调用栈统计
print("[最耗内存的调用栈]")
for stat in top_stats[:3]: # 仅显示前3个
print("\n".join(stat.traceback.format()))
print(f"占用: {stat.size / 1024:.2f} KB")
def log_memory_snapshot(stage: str):
process = psutil.Process(os.getpid())
mem_mb = process.memory_info().rss / 1024 / 1024
print(f"[MEMORY] {stage} - RSS: {mem_mb:.2f} MB")
current, peak = tracemalloc.get_traced_memory()
print(f"[TRACEMALLOC] {stage} - Current: {current / 1024 / 1024:.2f} MB, Peak: {peak / 1024 / 1024:.2f} MB")
from pympler import asizeof
print(asizeof.asizeof(x))
from memory_profiler import profile
@profile
def foo():
x = {...}
print("x size:", asizeof.asizeof(x))