1

我们在一个项目中使用 Spring Kafka Client。最近我们注意到,如果一个 Kafka Consumer 因 OutOfMemoryError 而死,服务继续正常运行并且没有新的消费者被创建。解决此问题的唯一方法是在日志中监控 OOM 并手动重新启动服务。我们正在寻找一种使消费者娱乐自动化的方法,例如:

  1. 强制 Spring(以某种方式)检测死亡的消费者并在运行时创建新的消费者。
  2. 如果消费者线程中的 OOM 会杀死整个服务,以便 AWS 自动缩放组可以创建该服务的新实例。

任何建议或想法表示赞赏。谢谢!

4

1 回答 1

1

我找到了与上述选项 2 相关的解决方案。从 java 版本“1.8.0_92”开始,有一些 JVM 选项允许在 OOME 的情况下杀死整个 JVM:

 1. -XX:+ExitOnOutOfMemoryError  
 2. -XX:+CrashOnOutOfMemoryError

已添加,请参阅发行说明

ExitOnOutOfMemoryError启用此选项后,JVM 将在第一次出现内存不足错误时退出。如果您更喜欢重新启动 JVM 实例而不是处理内存不足错误,则可以使用它。

CrashOnOutOfMemoryError如果启用此选项,当发生内存不足错误时,JVM 会崩溃并生成文本和二进制崩溃文件。

于 2020-10-13T15:46:58.957 回答