惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News - Newest:
Hacker News - Newest: "LLM"
Webroot Blog
Webroot Blog
S
Security @ Cisco Blogs
H
Heimdal Security Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
N
News and Events Feed by Topic
H
Hacker News: Front Page
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
SecWiki News
SecWiki News
N
News | PayPal Newsroom
T
Tor Project blog
W
WeLiveSecurity
A
Arctic Wolf
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
月光博客
月光博客
AWS News Blog
AWS News Blog
D
Docker
C
CERT Recently Published Vulnerability Notes
MyScale Blog
MyScale Blog
Google Online Security Blog
Google Online Security Blog
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss
I
InfoQ
人人都是产品经理
人人都是产品经理
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
博客园 - 【当耐特】
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
Recorded Future
Recorded Future
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
D
DataBreaches.Net
S
Security Affairs
WordPress大学
WordPress大学
T
Threatpost
Microsoft Security Blog
Microsoft Security Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
S
SegmentFault 最新的问题
B
Blog RSS Feed
Project Zero
Project Zero
P
Proofpoint News Feed

Yulin Lewis' Blog

cron表达式 cmd - 常用命令 Excel常见用法 shell脚本常用语法 Linux常用命令 别了,向晚 必胜客自助餐 Prometheus简易入门 Chrome问题汇总 SSH命令问题汇总 PGP加解密 Apollo问题汇总 GitHub问题汇总 SmartGit问题汇总 HttpClient问题汇总 Oculus Quest2食用指南 背包英雄:匕首流无尽模式详细攻略 Linux问题汇总 Postman问题汇总 别了,珈乐 桌面窗口管理器占用内存过高 ELK系列(6) - Elasticsearch常用接口 ELK系列(5) - Elasticsearch性能调优 MyBatis问题汇总 PostgreSQL - SQL调优方案 Java - 字符编码 Spring Data Redis问题汇总 Java数值问题汇总 lombok问题汇总
Eureka问题汇总
雨临Lewis · 2025-01-09 · via Yulin Lewis' Blog

Eureka心跳续约一直失败

由于服务端配置了30s无心跳则剔除注册的服务,当客户端由于网络波动等原因在一定时间内一直心跳失败时,就会出现一种很奇怪的现象:

服务端上注册的服务状态一直在上线、下线之间跳动,并且该服务一会消失、一会出现,此时客户端直接执行注册、上线、下线脚本都是正常的,观察日志会发现只有心跳一直失败,且心跳由最初配置的10s一次变成了100s一次,这个客户端服务在服务端的注册状态一直处于不稳定状态。

在翻看源码后发现,心跳任务由定时任务线程池执行,当心跳失败后会触发延时执行,每次翻倍,直到最初配置的10倍时间。由于配置的心跳间隔是10s,当出现网络波动后第一次心跳失败,下一次执行间隔变为20s,在连续失败几次后就达到了最大延时的100s。只有在成功触发一次心跳后,才会恢复为最初的10s。(源码看com.netflix.discovery.TimedSupervisorTask)

按理说在网络问题修复后,应该就恢复正常的心跳间隔,实际上一直都维持着100s一次的心跳间隔。原因是服务端只要心跳超过30s就剔除服务,此时心跳必然失败,无法恢复为10s一次的心跳间隔,导致服务端的服务状态永远异常、客户端心跳永远失败的死循环。

由于业务要求服务端注册的服务实时性高,心跳间隔和心跳剔除时间改动不了,只能从心跳任务线程池入手,将心跳失败后的间隔扩容系数从原本的10调整为1,这样心跳失败后依然保持原本配置的10s,就不会发生这个问题了。

由于没有找到对应的属性配置,只能改动Eureka的源码,重写了com.netflix.discovery.PropertyBasedClientConfigConstantsDEFAULT_EXECUTOR_THREAD_POOL_BACKOFF_BOUND的值。临时应急的处理方法是直接重启客户端,但如果不改源码,以后依然会触发这种问题。

注意

本文最后更新于 January 9, 2025,文中内容可能已过时,请谨慎使用。

赞赏支持

微信打赏 支付宝打赏