在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

Netflix 引入虚拟线程:性能和缺陷案例研究

  • 2024-08-27
    北京
  • 本文字数:1460 字

    阅读完需:约 5 分钟

Netflix 引入虚拟线程:性能和缺陷案例研究

Netflix 是 Java 的长期采用者,最近他们升级到了 Java 21。他们现在正在利用 JEP 439 中引入的分代 ZGC 和 JEP 444 中引入的虚拟线程等新特性来提升其庞大的微服务组合的性能。虽然为高吞吐量并发应用程序设计的虚拟线程在早期展示出了优势,但它们在现实场景中也带来了独特的挑战。


在 Netflix Tech Blog 上最近的一篇文章中,其 JVM 生态系统团队分享了他们使用虚拟线程的经验,特别是服务遇到超时和挂起实例的问题。该问题与虚拟线程和阻塞操作和 OS 线程可用性的交互有关,导致其基于 SpringBoot 的应用程序出现类似死锁的情况。


Netflix 工程师在运行 Java 21 并使用 SpringBoot 3 和嵌入式 Tomcat 的服务中观察到了间歇性超时和无响应实例。尽管 JVM 实例保持活动状态,但它们停止提供流量,其特点是卡在 closeWait 状态的套接字显著增加。当远程端关闭 TCP 连接,但本地端尚未关闭其连接端,使套接字处于等待状态时,就会出现此状态。有关此问题的更多信息,请参阅术语部分的 RFC 793。



初步诊断表明虚拟线程与此问题有关,尽管它们并未出现在传统的线程转储中。团队使用 jcmd Thread.dump_to_file 发现了数千个“空白”虚拟线程,表示这些线程已创建但尚未运行。问题追溯到 Tomcat 的请求处理,其中创建了新的虚拟线程,但由于操作系统线程不可用而无法安排。


#119821 "" virtual#119820 "" virtual#119823 "" virtual#120847 "" virtual#119822 "" virtual...
复制代码


分析显示,Tomcat 的虚拟线程执行器正在为每个请求创建线程,但这些线程因等待锁定而停滞。具体而言,由于同步块内的阻塞操作,线程被固定到 OS 线程,而 ForkJoinPool 中可用的 OS 线程数量有限,让情况更加恶化。


该问题源于 一个经典的死锁场景,其中虚拟线程无法继续,因为所需的锁被其他虚拟线程持有,这些虚拟线程被固定到所有可用的 OS 线程。这阻止了新的虚拟线程的调度,结果阻塞了应用程序。


为了解决该问题,Netflix 的 JVM 生态系统团队使用一个堆转储来检查锁的状态,并确认没有线程拥有它,但等待它的线程无法继续。这是一个本应解决的瞬态,但却导致了类似死锁的情况。


团队确定了根本原因,并开发了一个可重现的测试用例,以防止将来出现类似问题。虽然 Java 21 中的虚拟线程已显示出通过减少开销来提高性能的潜力,但此案例意味着了解它们与现有线程模型和锁定机制的交互方式是很重要的。


除了 Netflix 的发现之外,InfoQ 上最近的一项案例研究还深入探讨了虚拟线程的实际挑战和优势,特别是在涉及大量并发负载的场景中。这项研究强调了在将虚拟线程集成到生产系统中时需要仔细考虑和测试,因为即使是很小的架构细节也会导致严重的性能影响。


除了虚拟线程之外,Netflix 采用的分代 ZGC 也在优化其系统时发挥了关键作用,正如最近的一篇文章中提到的那样。ZGC 能够在堆大小增加时保持较低的暂停时间,通过减少垃圾收集开销和增强响应能力,显著提高了 Netflix 的应用程序性能。有关分代 ZGC 的更多信息,请参阅这篇 InfoQ 新闻。


Netflix 还有一个强大的警报系统,基于其 Atlas Streaming Eval 平台,对帮助他们识别和诊断这些问题是很重要的。该系统旨在改进实时监控和警报,使团队能够捕获处于问题状态的实例并提供关键数据进行追溯分析。


尽管面临各种挑战,Netflix 对虚拟线程的未来仍持乐观态度,并预计即将发布的 Java 版本将取得进一步改进,特别是在解决锁定原语的集成挑战方面。此案例研究对于性能工程师和开发人员在其应用程序中探索虚拟线程时是一个有价值的示例。


原文链接:

https://www.infoq.com/news/2024/08/netflix-performance-case-study/

2024-08-27 09:569518

评论 1 条评论

发布
用户头像
Netflix最后解决了此问题吗?文章末尾的“解决锁定原语的集成”是指Netflix本次的问题名称吗
2024-08-29 18:09 · 广东
回复
没有更多了
发现更多内容

不会吧不会吧!听说还有人在手动迁移Vault密钥?

Jianmu

自动化 数据迁移 密钥 建木CI vault

工业质检如何以“智”取胜?15分钟上手工业零部件检测全流程方案

百度开发者中心

FinClip+系列 | VUE前端开发框架核心原理

Speedoooo

Vue 前端框架 移动开发 移动端开发 小程序容器

6 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

抢先预约 | 阿里云无影云应用线上发布会预约开启

阿里云弹性计算

无影云电脑 云应用

漏洞扫描器并非100%靠谱,那么容器镜像安全又当如何保证?

青藤云安全

网络安全 安全管理 漏洞修复

明明已部署EDR,服务器为什么还是被入侵了?

青藤云安全

安全攻防 网络安全 主机安全

一文彻悟容器网络通信

阿里巴巴中间件

阿里云 容器 云原生 中间件

Dubbo3 落地实践及 Mesh 解决方案

阿里巴巴中间件

阿里云 开源 云原生 dubbo 中间件

企评家,企业数据分析评价提供投资信息支撑

企评家

SeaTunnel 加入开源之夏!一起来拿奖金

Apache SeaTunnel

Apache 大数据 开源 workflow Seatunnel

Hoo研究院 | 什么是流动性池?(下)流动性池的运作

区块链前沿News

defi 流动性 Hoo

DTMO直播预告|Taier1.1新功能详解&控制台介绍

袋鼠云数栈

大数据

在线TSV转YAML工具

入门小站

工具

企评家 | 白银有色集团股份有限公司成长性评价简介

企评家

李俊刚:我是如何在OpenHarmony完成ap6275s WiFi驱动的HDF适配工作的?

OpenHarmony开发者

OpenHarmony WiFi驱动

攻防演练中常见的8种攻击方式及应对指南

青藤云安全

小白福利!教你用低代码实现一个简单的HarmonyOS页面跳转功能

HarmonyOS开发者

HarmonyOS 低代码开发

linux中vi,vim操作技巧

入门小站

Linux

在线文本列表补集计算工具

入门小站

工具

三、云原生安全关键要素

穿过生命散发芬芳

云原生安全 5月月更

直播预告丨Hello HarmonyOS进阶课程第三课——游戏开发实践

HarmonyOS开发者

游戏开发 HarmonyOS

企评家|广州白云国际机场股份有限公司成长性报告简述

企评家

OpenHarmony浏览器上新,在Dayu200开发板上终于能优雅地浏览网页

离北况归

浏览器 OpenHarmony Openharmony啃论文俱乐部 PIMF OpenHarmony应用安装

服务网格接口 SMI 规范解读

Flomesh

云原生 服务网格 SMI OpenServiceMesh

柏拉图会成为元宇宙风险标吗?PlatoFarm的机会很大

小哈区块

国内首个开源物联网边缘工业协议网关软件,Neuron v2.0产品解读

EMQ映云科技

开源 物联网 IoT 5月月更 neuron

Spark离线开发框架设计与实现

百度开发者中心

Cocos 常用功能介绍

空城机

Cocos 5月月更

接口测试工具简介!

Liam

测试 自动化测试 测试工具 测试自动化 测试管理工具

Netflix 引入虚拟线程:性能和缺陷案例研究_编程语言_A N M Bazlur Rahman_InfoQ精选文章