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

Google Apps Engine从Python2.7转3.11后网站每小时崩溃求助

迁移至Python 3.11后GAE上的WildflowerSearch.org出现随机内存崩溃问题

问题背景

  • 已将运行在Google Apps Engine(GAE)上的WildflowerSearch.org从Python 2.7迁移至Python 3.11,迁移为满足Google 2024年2月的强制要求以维持网站开发权限
  • 迁移成功完成,但网站运行约1小时后会随机崩溃;崩溃无固定复现路径,需约1小时的用户输入触发,已耗时数周排查仍无头绪

崩溃细节

  • 崩溃报错为:UnboundLocalError: cannot access local variable xxx where it is not associated with a value,报错变量为16k长度的bytes字符串,且每次报错的变量不固定
  • 变量赋值后,已通过访问bytes字符串首尾字节的代码验证其有效性;随后进入循环逐个读取字节,循环中仅向列表添加元素(不修改该变量),但运行约1小时后,循环中的变量会从已定义状态变为无值状态
  • 症状指向:循环的内存占用触发垃圾回收(GC),而此前内存管理异常导致GC破坏了bytes字符串
  • 尝试通过try-except块在变量失效时从NDB重新加载内容,但运行约1小时后仍崩溃:先是变量变为未定义,随后except块中NDB键也变为未定义,推测是内存自由空间被破坏导致大量变量被篡改
  • 当前网站日均约5000次搜索请求,崩溃前约处理200次请求;重复崩溃前的请求单独执行均可正常完成,无异常

已尝试的排查措施

  • 移除Python 2时期的异步NDB访问逻辑,排除异步操作关联问题
  • 对从NDB获取的bytes字符串追加字节,确保循环中不使用原始NDB返回的对象
  • 进入循环前添加验证代码,确认bytes字符串可正常访问
  • 禁用网站非核心模块,排除其bug影响
  • 排查周期性恶意无效请求,未发现与崩溃的关联
  • 更新requirements.txt中依赖至最新版本,问题未解决
  • 尝试寻找在GAE Python 3环境中手动触发GC的方法(希望通过每次请求触发GC来快速定位导致内存异常的请求URL),但未找到可行方案

当前推测

问题大概率与Flask、NDB或代码与这些模块的交互方式有关,Python 2版本从未出现此类崩溃问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:40:08