You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python编写故意占用内存的程序用于测试?

模拟AWS Lambda内存耗尽的Python测试方案

以下是几种可控的内存占用实现方法,可用于复现Lambda无错误终止的场景:

方法1:大列表填充字节块(简单直接)

通过持续向列表中添加固定大小的字节块,精准控制内存占用量,适合快速模拟内存耗尽:

import sys

def occupy_memory(target_mb):
    block_size = 1024 * 1024  # 单块1MB
    block = b'x' * block_size
    memory_blocks = []
    
    # 循环添加块,直到接近目标内存
    while sys.getsizeof(memory_blocks) + len(memory_blocks)*block_size < target_mb * block_size:
        memory_blocks.append(block)

def lambda_handler(event, context):
    # 按需设置目标内存,比如接近你的Lambda配置上限(如512MB)
    occupy_memory(500)
    return {"statusCode": 200, "body": "内存占用测试执行中"}

说明:Lambda内存耗尽时会直接终止进程,不会输出常规错误日志,与你遇到的现象一致。可通过CloudWatch的Memory Used指标确认实际占用量。

方法2:大量小对象累积(贴近业务场景)

如果你的业务代码是因创建大量小对象导致内存溢出,可模拟这种场景:

import sys

class BusinessObject:
    def __init__(self):
        # 每个实例携带1KB的业务数据
        self.payload = b'data' * 256

def occupy_memory(target_mb):
    object_pool = []
    per_obj_size = 1024  # 单对象约1KB
    target_bytes = target_mb * 1024 * 1024
    count = 0
    
    while sys.getsizeof(object_pool) + count * per_obj_size < target_bytes:
        object_pool.append(BusinessObject())
        count += 1

def lambda_handler(event, context):
    occupy_memory(400)
    return {"statusCode": 200, "body": "小对象内存测试执行中"}

方法3:Numpy大数组(适合数据处理场景)

如果你的Lambda使用Numpy处理数据,可通过创建超大数组快速占满内存:

import numpy as np

def lambda_handler(event, context):
    # 创建1024MB的float64数组(每个元素8字节,共134217728个元素)
    large_array = np.ones((134217728,), dtype=np.float64)
    # 保持引用防止GC回收
    return {"statusCode": 200, "body": "Numpy内存测试执行中"}

测试注意事项

  • 逐步调整目标内存值,从低于Lambda配置上限开始,逐步增加到超过上限,观察是否出现无错误终止
  • 查看CloudWatch日志:内存耗尽时通常只有启动记录,无正常结束日志,或显示进程意外终止

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:55:19