使用 pyrasite-ng 和 guppy3 做内存分析

复制代码
pyrasite-ng>=2.0.3
guppy3>=3.1.6

pyrasite-shell 3844242

docker-compose.yaml 放开 SYS_PTRACE

复制代码
version: "3.8"

services:
  your-app:
    image: your-image
    cap_add:
      - SYS_PTRACE
python 复制代码
from guppy import hpy
from guppy.heapy.UniSet import IdentitySetMulti

hp = hpy()

identity_set_multi: IdentitySetMulti = hp.heap()
print(identity_set_multi.bytype)

big_type = identity_set_multi.bytype[0]

print(big_type)

print(big_type.byvia[:5])

print(hp.iso(big_type[0]).referrers)
python 复制代码
# -*- coding: utf-8 -*-
import time
import os
import psutil


class MemoryLeakObject:
    """创建一个会占用大量内存的对象"""
    def __init__(self, size_mb):
        # 每个对象创建一个大字节数组来占用内存
        self.data = bytearray(size_mb * 1024 * 1024)
        # 填充一些数据以确保内存真正被分配
        for i in range(len(self.data)):
            self.data[i] = i % 256


class MemoryLeakManager:
    """管理内存泄漏对象的容器"""
    _leaked_objects = []

    @classmethod
    def create_leak(cls, size_mb):
        """创建一个内存泄漏对象并添加到全局容器中"""
        obj = MemoryLeakObject(size_mb)
        cls._leaked_objects.append(obj)
        return len(cls._leaked_objects)

    @classmethod
    def get_total_leaked_memory(cls):
        """获取总泄漏内存大小(MB)"""
        return len(cls._leaked_objects) * 100



def mem_info_print():
    process = psutil.Process(os.getpid())
    memory_info = process.memory_info()
    # 转换为MB
    rss_mb = memory_info.rss / 1024 / 1024
    vms_mb = memory_info.vms / 1024 / 1024
    # 打印内存使用情况
    print(f"进程ID: {os.getpid()} | 物理内存使用: {rss_mb:.2f} MB | 虚拟内存使用: {vms_mb:.2f} MB")


def main():
    print("开始创建内存泄漏...")

    # 目标泄漏1GB内存,每次泄漏100MB
    for _ in range(10):
        mem_info_print()
        obj_id = MemoryLeakManager.create_leak(100)  # 每次泄漏100MB
        print(f"创建泄漏对象 {obj_id}")
        time.sleep(0.5)

    print("\n=== 内存泄漏创建完成 ===")
    print("预期泄漏内存: 1000 MB (1GB)")
    print("程序将持续运行以观察内存泄漏情况...")
    print(f"进程ID: {os.getpid()}")

    while True:
        time.sleep(2)
        #mem_info_print()


if __name__ == "__main__":
    main()
相关推荐
笨鸟先飞,勤能补拙1 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能2 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂3 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study3 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境4 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境4 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1234 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102165 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb005 小时前
一个项目带你入门AI应用开发01
python
0566465 小时前
Python康复训练——常用标准库
开发语言·python·学习