【问题标题】:What does Keep-Alive-Timer mean in JVisualVM Threads investigator?JVisualVM 线程调查器中的 Keep-Alive-Timer 是什么意思?
【发布时间】:2016-09-05 05:16:38
【问题描述】:
这些 Keep-Alive-Timer 线程在左侧有白色标签,白色标签在下面没有描述其含义。我想知道这些 Keep-Alive-Timer 线程是如何创建的以及为什么。
实际上,我正在使用Timer 来检查程序中的心跳消息。每当心跳来临时,我都会安排一个新的TimerTask,延迟 6 秒。如果没有心跳,则会触发此TimerTask 并发送警报。
【问题讨论】:
标签:
java
multithreading
timer
jvisualvm
【解决方案1】:
Keep-Alive-Thread 负责维护KeepAliveCache,它存储有关使用Keep-Alive 属性的http 连接的信息。如果您至少有一个这样的连接,就会有一个 Keep-Alive-Thread 监视它们。当您关闭所有保持活动连接时,该线程将被销毁。当您向空缓存添加新的保持活动连接时,JVM 会再次启动该线程。
白色意味着线程不再存在。如您所见,您的 JVM 不断创建和销毁该线程。
您似乎正在手动执行与跟踪心跳的计时器任务相同的工作。您在 6 秒后关闭这些保持活动连接,JVM 会破坏保持活动线程。您创建一个新连接,JVM 启动一个新的监视 Keep-Alive-Thread。
如果你在你的 http 连接上使用Keep-Alive 属性,最好设置正确的超时时间,让 JVM 来做家务。