Java &引用;“内存不足”;加上;超出总承包商限额;在SpringBoot中使用ExecutorService时

Java &引用;“内存不足”;加上;超出总承包商限额;在SpringBoot中使用ExecutorService时,java,multithreading,executorservice,Java,Multithreading,Executorservice,我们已经创建了Spring Listener/Consumer接收来自ActiveMQ的消息并将其存储在RDBMS中。此应用程序连续运行。我们使用ExecutorService接收消息。其threadpoolsize=15。 如果应用程序运行超过小时,它将停止运行,并出现内存不足错误 请有人帮助查找此错误的原因 服务关闭后GC如何与executorService一起工作 仅当应用程序停止时 您的应用程序中存在内存泄漏,或者您正在累积应进行垃圾收集的对象。您应该使用类似的软件来查找原因 您还可以增

我们已经创建了Spring Listener/Consumer接收来自ActiveMQ的消息并将其存储在RDBMS中。此应用程序连续运行。我们使用ExecutorService接收消息。其threadpoolsize=15。 如果应用程序运行超过小时,它将停止运行,并出现内存不足错误

  • 请有人帮助查找此错误的原因
  • 服务关闭后GC如何与executorService一起工作 仅当应用程序停止时

  • 您的应用程序中存在内存泄漏,或者您正在累积应进行垃圾收集的对象。您应该使用类似的软件来查找原因

    您还可以增加JVM可用的RAM,但如果不修复漏洞,这只是一个临时解决方案

    GC如何使用executorService,因为只有在应用程序停止时服务才会关闭


    错误告诉您无法创建新线程,因为内存不足。

    关于您的第一个问题,我们需要查看一些代码来帮助我们发现内存泄漏。对此否决的人应该解释原因。“内存泄漏”一词的应用可能与C/C++等语言不同,但其原理是相同的。OP正在创建数据,使得ExecutorService中的线程能够访问数据,而不允许Java回收数据。导致GC抖动并导致OOM错误。一条注释
    错误告诉您,由于内存不足,它无法创建新线程。
    不完全正确。应用程序完成是因为当线程停止时,来自这些线程的可访问数据不再可访问,并且可以由VM回收