在运行在Java 8上的中,我们看到对servlet的前端请求失败了:
java.lang.OutOfMemoryError: GC overhead limit exceeded但是,该错误的堆栈跟踪与servlet无关,而是从后台延迟任务的run()方法抛出。
这些任务通常由延迟任务servlet执行,当然不是由我们看到500错误的servlet执行的。
我绞尽脑汁想知道,如果一个特定的实例同时服务于一个延迟的任务和那个前端servlet请求,并且由于上面的GC错误而崩溃了,那么它是否能够取出servlet线程(以及可能在同一个实例上的其他线程),以便它们都在相同的内存异常下失败呢?
因此,我的问题是:在一个实例Google 8环境中隔离线程会允许一个线程中的内存错误使同一实例中的所有线程崩溃吗?如果是这样,那么所有线程中的strack跟踪会是相同的吗?
Update:查看特定实例ID的日志时,在相同的时间内,我看到了大量相同堆栈跟踪的其他示例,它们都在不同的用户中,以及不同的前端servlet,因此它似乎支持这样的理论,即整个实例被破坏,我们看到的堆栈跟踪以某种方式从同一实例上的不同线程交叉过来。
发布于 2019-04-30 00:04:10
在应用程序引擎python上也发生了类似的事情。
我在GCP支持下来回走动,显然罪魁祸首是他们的一个库中的一个内存泄漏,它会摧毁我的整个实例,当时运行的每一个请求都一起死掉了。
所以是的,如果实例崩溃,所有进程都会死掉。
https://stackoverflow.com/questions/55911042
复制相似问题