gpt4 book ai didi

java - 当 Web 服务器线程中出现 OutOfMemoryError 时,Spring 启动请求会挂起

转载 作者:行者123 更新时间:2023-12-02 08:56:14 26 4
gpt4 key购买 nike

由于一些错误,我的应用程序消耗了太多内存,并且堆空间即将耗尽。

但是,我并没有请求失败,而是无限挂起并且仅在控制台中出现以下错误:

*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message can't create name string at JPLISAgent.c line: 826

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "http-nio-8090-ClientPoller"

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Catalina-utility-2"

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Catalina-utility-1"

为什么请求挂起而不失败?唯一的解决方案(除了一开始就内存不足之外)是终止该服务吗? (它在容器中运行,因此会重新启动)

我的终止服务的代码:

static class GlobalThreadExceptionHandler implements UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
logger.error(String.format("Caught unhandled exception in thread %s", thread), throwable);
Runtime.getRuntime().halt(137);
}
}

public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(new GlobalThreadExceptionHandler());
...
}

(System.exit() 也挂起)

我正在使用 Java 11 和 Spring Boot 版本 2.1.6

最佳答案

这是当 Java 垃圾收集器尝试释放内存时应用程序的暂停时间或延迟时间。但由于内存已满,垃圾收集器似乎也无法运行。因此应用程序被挂起。

有许多新的垃圾收集器,例如 zgc、shenandoah 可以与应用程序并行运行以持续释放内存,但我不知道它们是否适用。

如果您使用的是 docker 容器,您可以检查“docker stats”来检查您的容器何时使用和释放内存。如果您的系统有足够的内存,您可以相应地增加/设置容器的 MAX_HEAP 大小变量。您还可以相应地移动/缩放其他容器,以便该容器获得更多资源。

关于java - 当 Web 服务器线程中出现 OutOfMemoryError 时,Spring 启动请求会挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60473524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com