Google Cloud Run+FastAPI大文件上传:1GB实例能否承载10个1GB上传请求?
问题分析与结论
核心结论
配置2vCPU、1GB RAM的Cloud Run实例完全无法正常处理10位用户同时上传1GB文件的请求,会触发磁盘空间耗尽、内存溢出,最终导致实例被终止,所有上传请求失败。
具体原因拆解
- Cloud Run临时磁盘限制:Cloud Run每个实例的临时目录
/tmp容量为实例内存的50%,也就是1GB内存实例对应512MB的/tmp空间。而FastAPI的UploadFile默认使用SpooledTemporaryFile,当上传文件大小超过10MB(Starlette默认阈值)时,会将超出部分写入/tmp目录。单个1GB文件就需要远大于512MB的磁盘空间,第一个上传请求写到512MB时就会触发"磁盘空间不足"错误,后续所有上传也会跟着失败。 - 内存资源耗尽:每个上传请求的前10MB会暂存在内存中,10个并发请求就会占用100MB内存,再加上Hypercorn进程、FastAPI本身的内存开销,以及系统页缓存(用于磁盘读写)的占用,很快会触及1GB的内存上限。当内存使用率超过阈值时,Cloud Run会强制终止实例,中断所有正在处理的请求。
- 请求超时风险:即使忽略磁盘和内存问题,Cloud Run默认请求超时为300秒(最长可配置为900秒),1GB文件的上传速度受限于用户带宽和Cloud Run的网络入口带宽,大概率会在上传完成前触发超时,导致请求失败。
补充说明
你提到启用HTTP/2后Cloud Run的上传限制看似消失,但这只是突破了HTTP/1.1的部分传输限制,Cloud Run的实例资源限制(内存、临时磁盘)依然生效,无法支撑大文件的并发上传场景。
内容的提问来源于stack exchange,提问作者Daniele Carriere
相关产品推荐
相关产品推荐

