作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于一些错误,我的应用程序消耗了太多内存,并且堆空间即将耗尽。
但是,我并没有请求失败,而是无限挂起并且仅在控制台中出现以下错误:
*** 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/
我是一名优秀的程序员,十分优秀!