工具简介

这个Python脚本实现了一个有趣的内存压力测试工具,通过可控的内存分配机制帮助开发者:

  • 测试程序的内存承载能力
  • 直观观察内存分配过程
  • 验证系统的内存管理机制
def eat_memory(target_mb):
    # 使用字节串(b'0')作为最小存储单元(1字节)
    chunk = b'0' * chunk_size
    ...
  1. 渐进式分配:以500MB为块逐步申请内存,避免瞬间内存冲击
  2. 实时反馈:动态显示已分配内存量(sys.stdout.write实现进度效果)
  3. 异常处理:
    MemoryError捕获内存不足
    • 支持Ctrl+C中断并立即释放内存
  4. 内存锁定:通过无限循环保持内存占用,直到主动释放

完整代码

import sys
import time

def eat_memory(target_mb):
    print(f"🐍 尝试分配 {target_mb} MB 内存...")
    chunks = []
    chunk_size = 500 * 1024 * 1024  # 每次分配10MB
    target_bytes = target_mb * 1024 * 1024
    allocated = 0

    try:
        while allocated < target_bytes:
            # 使用字节串减少内存开销(1字节=1byte)
            chunk = b'0' * min(chunk_size, target_bytes - allocated)
            chunks.append(chunk)
            allocated += len(chunk)
            sys.stdout.write(f"\r✅ 已分配: {allocated // (1024 * 1024)} MB")
            sys.stdout.flush()
            time.sleep(0.1)  # 稍作停顿方便观察

        print("\n🎯 内存已满载!保持占用中...")
        while True:
            time.sleep(10)  # 保持内存占用

    except MemoryError:
        print("\n❌ 内存分配失败!已达到系统限制")
    except KeyboardInterrupt:
        print("\n🛑 用户中断!释放内存中...")
        del chunks
    finally:
        # 强制清空内存(实际在函数退出时会自动释放)
        chunks = None

if __name__ == "__main__":
    try:
        mb = int(input("请输入要分配的内存大小(MB):"))
        if mb <= 0:
            raise ValueError
        eat_memory(mb)
    except ValueError:
        print("⚠️ 请输入有效的正整数!")