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

部署在AWS Lambda上的ASP.NET Core 6 API报设备空间不足错误求助

问题分析与解决方案

针对AWS Lambda上ASP.NET Core 6 Web API出现的System.IO.IOException: No space left on device : '/tmp/ASPNETCORE_xxxx.tmp'错误,以下是具体排查方向和解决办法:

核心原因

你没主动使用临时存储,但ASP.NET Core内部组件、Lambda实例复用机制或第三方依赖可能在悄悄占用/tmp空间,长期累积后超过512MB的配置上限。

排查与解决步骤

1. 定位占用空间的文件

在Lambda函数中加入代码,打印/tmp目录的文件详情,通过CloudWatch日志确认哪些文件在占用空间:

var tmpDirectory = new DirectoryInfo("/tmp");
foreach (var file in tmpDirectory.GetFiles("*", SearchOption.AllDirectories))
{
    Console.WriteLine($"文件路径: {file.FullName} | 大小: {file.Length / 1024} KB | 创建时间: {file.CreationTimeUtc}");
}

2. 清理临时文件

  • ASP.NET Core数据保护组件:默认会在/tmp存储加密密钥,可改用AWS Secrets Manager存储密钥避免文件累积:
    builder.Services.AddDataProtection()
        .PersistKeysToAwsSecretsManager("your-data-protection-secret-id");
    
  • 主动清理过期文件:在请求结束或Lambda初始化阶段,清理/tmp下的旧文件(比如创建超过1小时的文件):
    var tmpDirectory = new DirectoryInfo("/tmp");
    foreach (var file in tmpDirectory.GetFiles())
    {
        if (file.CreationTimeUtc < DateTime.UtcNow.AddHours(-1))
        {
            try { file.Delete(); }
            catch { /* 忽略正在被占用的文件 */ }
        }
    }
    
  • 日志组件优化:如果配置了文件日志,限制日志文件的大小和留存数量,或者直接移除文件日志输出:
    "Logging": {
        "Providers": {
            "File": {
                "Enabled": false
            }
        }
    }
    

3. 调整临时存储配置(治标方案)

如果确认需要更大的临时空间,可在Lambda控制台的「配置」→「常规配置」中修改临时存储大小(最大支持10GB),但优先解决文件累积的根源问题。

4. 检查第三方依赖

排查项目中的NuGet包(比如PDF生成、文件处理类库),这些库常默认使用/tmp存储临时文件,查看其文档是否支持配置临时目录或自动清理机制。

内容的提问来源于stack exchange,提问作者a.tolba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:16:10