HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

在 Twitter,Netty 4 GC 开销降为五分之一

  • 2013-11-12
  • 本文字数:1966 字

    阅读完需:约 6 分钟

Netty 项目在 7 月份发布了 Netty 4 的第一个版本,其性能的显著提升主要来源于垃圾收集开销的降低。在 Twitter,Netty 4 经过完善已经获得了 5 倍的性能提升,但也有一些代价。

Netty 项目创始人和 Twitter 软件工程师 Trustin Lee 从 2003 年开始就一直编写网络应用程序框架。Netty 第一次公开发布是在 2004 年 6 月,其项目主页这样描述它,“一种异步事件驱动的网络应用程序框架,用于可维护的高性能协议服务器和客户端的快速开发。”

Lee 在博文“ Netty 4 在 Twitter:降低 GC 开销”中写道,Twitter 在许多地方使用 Netty 实现联网功能:

Netty 包含一个反应堆模式的实现,它同时也是 Play 框架的核心。Play、Grails 和许多其它 Web 框架都采用一种 WAR-less Web 应用程序模式,它允许与底层 HTTP 服务器更紧密地集成。使用内部包含像 Netty 这种框架的服务器,异步编程会简单很多。异步编程和非阻塞 I/O 是“响应宣言( The Reactive Manifesto )”的核心。InfoQ 在“新兴趋势:响应式编程”中报道了这一新兴模式。

Netty 3 使用 Java 对象表示 I/O 事件。Lee 谈道:

这样简单,但会产生大量的垃圾,尤其是在我们这样的规模下。Netty 4 在新版本中对此做出了更改,取代生存周期短的事件对象,而以定义在生存周期长的通道对象上的方法处理 I/O 事件。它还有一个使用池的专用缓冲区分配器。

……每当收到新信息或者用户发送信息到远程端,Netty 3 均会创建一个新的堆缓冲区。这意味着,对应每一个新的缓冲区,都会有一个‘new byte[capacity]’。这些缓冲区会导致 GC 压力,并消耗内存带宽:为了安全起见,新的字节数组分配时会用零填充,这会消耗内存带宽。然而,用零填充的数组很可能会再次用实际的数据填充,这又会消耗同样的内存带宽。如果 Java 虚拟机(JVM)提供了创建新字节数组而又无需用零填充的方式,那么我们本来就可以将内存带宽消耗减少 50%,但是目前没有那样一种方式。

在 Netty 4 中,代码定义了粒度更细的 API,用来处理不同的事件类型,而不是创建事件对象。它还实现了一个新缓冲池,那是一个纯 Java 版本的 jemalloc (Facebook 也在用)。现在,Netty 不会再因为用零填充缓冲区而浪费内存带宽了。不过,由于它不依赖于 GC,开发人员需要小心内存泄漏。如果忘记在处理程序中释放缓冲区,那么内存使用率会无限地增长。

这些变化没有向后兼容 Netty 3,但其垃圾生成速度是原来的 1/5,而垃圾清理速度快了 5 倍。

Lee 写道:

我们比较了两个分别建立在 Netty 3 和 4 基础上 echo 协议服务器。(Echo 非常简单,这样,任何垃圾的产生都是 Netty 的原因,而不是协议的原因)。我使它们服务于相同的分布式 echo 协议客户端,来自这些客户端的 16384 个并发连接重复发送 256 字节的随机负载,几乎使千兆以太网饱和。

根据测试结果,Netty 4:

  • GC 中断频率是原来的 1/5:45.5 vs. 9.2 次 / 分钟
  • 垃圾生成速度是原来的 1/5:207.11 vs 41.81 MiB/ 秒

Lee 提到,在 Twitter 中采用 Netty 4 还有一些障碍,那就是缓冲区泄漏和核心复杂。该项目希望增加更多功能,包括 HTTP/2、异步 DNS 解析以及客户端 HTTP 和 SOCKS 代理支持。

Yahoo 工程部门有一篇类似的文章,内容是关于 Netty 如何帮助他们成倍地提升 Storm 集群的速度。在名为“ Netty 让 Storm 飞速运行”的文章中,Bobby Evans 写道:

在雅虎,我们都是用自己的产品进行开发。在将 Netty 作为 Storm 集群的默认消息层之前,我需要一些数据来确认,它与当前的默认消息层 zeromq 相比怎么样。要做到这一点,我需要一个能够使 Storm 消息层达到极限的基准测试程序,因此,我写了一个。那是一个简单的高速测试,用于确认 Storm 在不同的 Bolt 和 Spout 之间推送消息有多快。它允许同时启动多个具有不同复杂度的 Topology 来发送定长消息。

Evans 指出,在小规模测试中(没有资源冲突),Netty 比 zeromq 更快(40-100%)。在大规模测试中,它也遇到了性能问题,但减少了解决问题的线程数。

对于大量短消息而言,Netty 的默认设置并不是很好,即使该节点上只有它自己在运行。但是,当把它限制在单线程上,我们每秒能够获得比 zeromq 多 85% 到 111% 的消息,之后网络再次饱和。

Evans 指出,Netty 现在是 Yahoo Storm 集群的默认消息层。

Netty 4 的改进对许多开源项目都大有益处。该框架有一个长长的相关项目列表,包括 Akka Apache James HornetQ Vert.x ,这里仅举这几例。要了解更多关于 Netty 4 的信息,请查看 netty.io Lee 的博文

查看英文原文: Netty 4 Reduces GC Overhead by 5x at Twitter

2013-11-12 07:408063
用户头像

发布了 256 篇内容, 共 85.6 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

mac苹果电脑游戏:植物大战僵尸中文版 for Mac

你的猪会飞吗

植物大战僵尸 for Mac 植物大战僵尸 mac 植物大战僵尸下载

数据库集成开发环境(IDE)JetBrains DataGrip 2024 for mac

Mac相关知识分享

PIRF-408-Hacks – Reading Ratings Better

EchoZhou

English

如何五分钟使用 Cocos Creator 快速部署 TON 游戏(第一部分)

股市老人

深入剖析淘宝商品详情API的调用与返回值

技术冰糖葫芦

api 网关 API Explorer API 策略 pinduoduo API

10 款企业级项目管理系统大盘点,助力解决企业问题

爱吃小舅的鱼

项目管理 企业级

MyBatis关联关系映射详解

百度搜索:蓝易云

mac游戏推荐:魔兽争霸3冰封王座Warcraft III for mac 解除8M地图限制

你的猪会飞吗

Mac游戏下载 Mac游戏分享

Color Hound for Mac颜色提取与管理工具

Mac相关知识分享

科研单位提效秘籍:深度评测10款项目管理系统

爱吃小舅的鱼

项目管理 科研

2024年8月文章一览

codists

编程人

ClickCharts for Mac思维导图软件激活版

Mac相关知识分享

思维导图

Mac 用户DMG打包软件DMG Wizard for Mac

Mac相关知识分享

打包软件

中小企业是否需要引入生产管理MES系统

万界星空科技

工业互联网 制造业 mes 生产管理MES系统

我对智能体和业务场景结合设计

软件工程师-罗小东

电机工厂MES系统-提升生产效率与质量的关键

万界星空科技

制造业 mes 万界星空科技 电机行业 电机MES

WorkPlusIM软件:助力企业实现个性化即时通讯平台

WorkPlus

一站式解决方案:私有化IM即时通讯的综合性能与功能

WorkPlus

天翼云 HBlock:安装无忧,使用更优!

Geek_c35793

sds 分布式存储 #HBlock

一文读懂文档管理:10大工具PK,找到最适合你的那一款

爱吃小舅的鱼

文档管理 文档管理软件

SOME/IP TTL在各种Entry中各是什么意思?有什么限制?

百度搜索:蓝易云

Leangoo领歌敏捷管理工具:打造高效敏捷团队,提升工作效率

顿顿顿

敏捷开发 敏捷项目 #敏捷开发 scrum工具 scrum敏捷工具

js箭头函数

百度搜索:蓝易云

深度学习常用的Python库(核心库、可视化、NLP、计算机视觉、深度学习等)

百度搜索:蓝易云

可以用数据库唯一索引处理幂等性吗?

江南一点雨

图片批量添加水印工具Watermarker+ for Mac

Mac相关知识分享

水印 图片水印

如何利用淘宝商品评论API返回值进行竞品分析

技术冰糖葫芦

api 网关 API Explorer API 策略 pinduoduo API

WorkPlus IM自定义门户:打造独具特色的企业个性化即时通讯平台

WorkPlus

嵌入式笔记 day3

万里无云万里天

嵌入式

如何正确使用WEB接口的HTTP状态码和业务状态码?

百度搜索:蓝易云

10款好用文档管理系统大盘点

爱吃小舅的鱼

文档管理

在Twitter,Netty 4 GC开销降为五分之一_Java_Matt Raible_InfoQ精选文章