工具简介
这个Python脚本实现了一个有趣的内存压力测试工具,通过可控的内存分配机制帮助开发者:
- 测试程序的内存承载能力
- 直观观察内存分配过程
- 验证系统的内存管理机制
def eat_memory(target_mb):
# 使用字节串(b'0')作为最小存储单元(1字节)
chunk = b'0' * chunk_size
...
- 渐进式分配:以500MB为块逐步申请内存,避免瞬间内存冲击
- 实时反馈:动态显示已分配内存量(
sys.stdout.write
实现进度效果) - 异常处理:
•MemoryError
捕获内存不足
• 支持Ctrl+C
中断并立即释放内存 - 内存锁定:通过无限循环保持内存占用,直到主动释放
完整代码
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("⚠️ 请输入有效的正整数!")