Che*_*hen 4 java multithreading jvm memory-management kafka-consumer-api
正如标题所示,我有一些代码包含在一个while(true)
无限循环中,并且所有代码都被完全捕获try
并catch
阻塞.这个线程是在main方法中启动的,但是,经过长时间运行,当我使用jstack检查并导致工作累积时,这个工作线程会神秘地消失.
以下是我的代码:
public void run() {
while (true) {
try {
// Consumer consumes from Kafka server
Global.KAFKA_METRIC_DATA_CONSUMER.consume(topic, handler);
} catch (Exception e) {
logger.error("Kafka consumer process was interrupted by exception!");
} finally {
try {
// Prevent restart too often
Thread.sleep(30 * BaseConst.SECOND);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这个结构将保持线程运行,因此是消费者.即使consume()方法失败,它也会无限重启.但是,正如我上面提到的,整个线程无声地消失,没有任何错误日志.有人能提供一些线索吗?
一些可能有用的信息:
OutOfMemoryError不是Exception.这是一个源自Throwable的错误.
如果那个被扔到你的某个地方consume(topic, handler)
,最后仍然会被调用,延迟不可避免的大约30秒......但之后错误将向上传递,你的循环将被终止.
归档时间: |
|
查看次数: |
522 次 |
最近记录: |