java - 在 Google App Engine Java 中,实例上的一个线程是否可能干扰另一个线程?
问题描述
在 Google App Engine 中,在 Java 8 上运行,我们看到对 servlet 的前端请求失败:
java.lang.OutOfMemoryError: GC overhead limit exceeded
但是该错误的堆栈跟踪与 servlet 无关——相反,它是从后台延迟任务的run()
方法中抛出的。
这些任务通常由延迟任务 servlet 执行,当然不会由我们看到 500 错误的 servlet 执行。
我在这个问题上摸不着头脑,想知道,如果一个特定的实例同时服务于延迟任务和前端 servlet 请求,并且它因上面的 GC 错误而崩溃,它是否可以取出 servlet 线程(可能还有其他同一实例上的线程),以便它们都因相同的内存异常而失败?
所以我的问题是:实例 Google App Engine Java 8 环境中的线程隔离是否允许一个线程中的内存错误导致同一实例中的所有线程崩溃,如果是这样,所有线程中的 strack 跟踪是否相同?
更新: 查看在同一时间发生的特定实例 ID 的日志,我看到大量相同堆栈跟踪的其他示例,都在不同的用户和不同的前端 servlet 中,所以它似乎支持该理论整个实例都被破坏了,我们看到的堆栈跟踪不知何故从同一个实例上的不同线程交叉。
解决方案
我在 app-engine-python 上发生了类似的事情
我在 GCP 支持下来回走动,显然罪魁祸首是他们的一个库中的内存泄漏,这会破坏我的整个实例,并且当时运行的每个请求都一起死掉。
所以是的,如果实例崩溃,所有进程都会死掉。
推荐阅读
- javascript - 无法清除 select2
- java - 可以使用 ByteBuddy 而不是被调用的方法来检测方法调用吗?
- rest - 通过后续调用HTTP API推送海量数据:verb to commit操作
- javascript - 如何将 iframe 中的页面内容作为 javascript 中的字符串获取?我想要一切从
- swift - 如果我在 viewDidLoad 之后以编程方式设置 UITableView 页脚视图不会动画
- docker - 将 Docker 映像环境变量公开给容器
- c++ - 有没有办法使用cin在同一行分配多个字符串?
- c# - 无法在循环中更新 DeletedAt 列
- iis - Shibboleth 3.x URL 重定向失败
- excel - 如果表格更改,如何锁定公式范围不更改?