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

推荐订阅源

K
Kaspersky official blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 热门话题
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Help Net Security
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
V
Vulnerabilities – Threatpost
云风的 BLOG
云风的 BLOG
博客园_首页
C
Cybersecurity and Infrastructure Security Agency CISA
量子位
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
Scott Helme
Scott Helme
A
About on SuperTechFans
博客园 - 司徒正美
Hacker News: Ask HN
Hacker News: Ask HN
The GitHub Blog
The GitHub Blog
Forbes - Security
Forbes - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Spread Privacy
Spread Privacy
T
Tailwind CSS Blog
S
Security Affairs
宝玉的分享
宝玉的分享

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,文中内容可能已过时,请谨慎使用。

赞赏支持

微信打赏 支付宝打赏