- 浏览: 2195855 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
随着JVM虚拟机和JIT即时编译技术的发展,对象的分配和回收是个非常轻量级的工作。但是对于缓冲区Buffer,情况却稍有不同,特别是对于堆外直接内存的分配和回收,是一件耗时的操作。为了尽量重用缓冲区,Netty提供了基于内存池的缓冲区重用机制。性能测试表明,采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右(性能数据与使用场景强相关)。
在4.x版本中,UnpooledByteBufAllocator是默认的allocator,尽管其存在某些限制。现在PooledByteBufAllocator已经广泛使用一段时间,并且我们有了增强的缓冲区泄漏追踪机制,所以是时候让PooledByteBufAllocator成为默认了。
优化前:
在玩家达到1100左右时直接内存迅速升高,CPU占用也飙高,
在最高峰时,服务器堆内存总共 3993 M,占用堆内存 3476 M,直接内存总共 2048 M,占用直接内存 715.8125 M。
发现netty底层的对象占用了很多
优化,猜测是因为直接内存不够用,在反复申请空间,导致CPU占用,并且直接内存一直回收不掉!使用对象池后,1380人,CPU占用大概为100/1200,表现很稳定,FULLGC 次数为0
服务器堆内存总共 3993 M,占用堆内存 2150 M,直接内存总共 2048 M,占用直接内存 400.00098 M
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.71 8.87 15.05 71.87 175 2.638 0 0.000 2.638
主要是加了以下两句:
bootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
bootstrap.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);//关键是这句
总结:这次优化,内存省下1.7G,直接内存剩下300M,并且表现稳定,在线人数提升了300人(可能受带宽的限制,否则表现应该会更好),CPU从占用100%降到10%。
在4.x版本中,UnpooledByteBufAllocator是默认的allocator,尽管其存在某些限制。现在PooledByteBufAllocator已经广泛使用一段时间,并且我们有了增强的缓冲区泄漏追踪机制,所以是时候让PooledByteBufAllocator成为默认了。
优化前:
在玩家达到1100左右时直接内存迅速升高,CPU占用也飙高,
在最高峰时,服务器堆内存总共 3993 M,占用堆内存 3476 M,直接内存总共 2048 M,占用直接内存 715.8125 M。
发现netty底层的对象占用了很多
Class Name | Shallow Heap | Retained Heap |
class com.lingyu.game.service.stage.StageManager @ 0x738778950 » | 8 | 166,381,728 |
com.lingyu.game.service.equip.EquipDataTemplateManager @ 0x738051240 » | 64 | 61,389,640 |
io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask @ 0x7a8a1b698 » | 40 | 56,363,384 |
com.lingyu.game.service.map.MapDataTemplateManager @ 0x738709b70 » | 64 | 48,234,856 |
com.lingyu.game.service.item.ItemRepository @ 0x7387965e0 » | 24 | 45,883,384 |
io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask @ 0x7d0b4ad08 » | 40 | 45,730,344 |
io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask @ 0x7dba870e8 » | 40 | 43,118,248 |
io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask @ 0x76289b300 » | 40 | 41,260,728 |
io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask @ 0x796226f90 » | 40 | 33,083,800 |
io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask @ 0x7ec9f19a0 » | 40 | 32,922,432 |
io.netty.channel.ChannelOutboundBuffer @ 0x754207b68 » | 72 | 25,823,800 |
Total: 11 entries |
优化,猜测是因为直接内存不够用,在反复申请空间,导致CPU占用,并且直接内存一直回收不掉!使用对象池后,1380人,CPU占用大概为100/1200,表现很稳定,FULLGC 次数为0
服务器堆内存总共 3993 M,占用堆内存 2150 M,直接内存总共 2048 M,占用直接内存 400.00098 M
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.71 8.87 15.05 71.87 175 2.638 0 0.000 2.638
主要是加了以下两句:
bootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
bootstrap.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);//关键是这句
Class Name | Shallow Heap | Retained Heap |
class com.lingyu.game.service.stage.StageManager @ 0x738977238 » | 8 | 126,628,072 |
com.lingyu.game.service.equip.EquipDataTemplateManager @ 0x7380c53f8 » | 64 | 61,391,800 |
com.lingyu.game.service.map.MapDataTemplateManager @ 0x738ce20d8 » | 64 | 48,234,856 |
com.xianling.stage.configure.entity.map.PathInfoTemplate @ 0x7389e7c60 » | 40 | 8,975,440 |
sun.misc.Launcher$AppClassLoader @ 0x738024e80 » | 80 | 8,652,528 |
com.lmax.disruptor.RingBuffer @ 0x7382e4408 » | 32 | 7,340,056 |
com.lingyu.game.service.item.ItemDataTemplateManager @ 0x738bc4a30 » | 56 | 5,910,288 |
com.xianling.stage.configure.entity.map.PathInfoTemplate @ 0x73ac19aa8 » | 40 | 5,231,256 |
org.springframework.beans.factory.support.DefaultListableBeanFactory @ 0x7381979b8 » | 200 | 5,172,192 |
com.xianling.stage.configure.entity.map.PathInfoTemplate @ 0x73addc8b8 » | 40 | 4,572,560 |
Total: 10 entries |
总结:这次优化,内存省下1.7G,直接内存剩下300M,并且表现稳定,在线人数提升了300人(可能受带宽的限制,否则表现应该会更好),CPU从占用100%降到10%。
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 626本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
小程序textarea完美填坑
2020-07-07 16:09 520相信做微信小程序的码友们都被textarea这个原生组件坑过 ... -
Nginx+Https自己敲命令生成证书
2020-05-18 09:35 947一、准备 环境:centos6.8 ... -
https证书生成环境搭建配置(基于Tomcat和Nginx)
2020-04-24 11:06 821一、基于Tomcat、JDK内置密钥工具: 1、生成服务端证 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1099颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 991从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1166Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1003Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 838前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 925监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 799在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 948最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
史上最强Tomcat8性能优化
2019-11-01 21:41 884授人以鱼不如授人以渔 ... -
SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问
2019-10-07 09:13 5611.使用jdk自带的 keytools 创建证书 打开cmd ... -
Spring Boot工程集成全局唯一ID生成器 UidGenerator
2019-09-16 09:04 855概述 流水号生成器(全局唯一 ID生成器)是服务化系统的基础 ... -
CentOS7下Redis的安装与使用
2019-08-17 11:45 606一、手动安装过程 1、准备工作(安装gcc依赖) yum ... -
Nginx与tomcat组合的简单使用
2019-08-17 10:05 430配置tomcat跳转 请求http出现400的时候在这里配置 ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1327##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1113当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 774setstate的时候会一直无限的调用listview.bui ...
相关推荐
Netty广泛应用于分布式系统、游戏服务器、流媒体服务、微服务框架等领域,例如 Dubbo 和 Spring Cloud 的部分组件就采用了Netty作为底层通信框架。 7. **学习Netty的重要性** 掌握Netty能够帮助开发者构建高效率...
此外,Netty的扩展性允许开发者在必要时进行底层优化,以应对更复杂的场景和性能要求。 在实现远程调用流程时,客户端和服务端需要建立连接、发布和订阅服务、进行服务发现、序列化和反序列化数据以及使用代理模式...
4. **实战项目**:通过实践项目来加深对Netty的理解,比如实现一个简单的聊天服务器。 5. **进阶优化**:学习如何对Netty进行调优,包括但不限于线程模型选择、内存管理等。 ### 总结 Netty作为一个功能强大且灵活...
3. **高性能**:Netty 的设计目标就是提供高性能,它优化了缓冲区管理,减少了对象创建,以及对零拷贝的支持。零拷贝技术在处理大数据传输时能显著提高效率,减少内存压力。 4. **可扩展性**:Netty 的协议处理模块...
- Netty 为了解决这些问题,提供了一个高效的、面向协议的网络编程框架,允许开发者快速开发出针对特定场景优化的协议服务和客户端,同时保持应用的性能和稳定性。 2. Netty 的关键特性: - 异步和事件驱动:...
在准备Java面试时,上述知识点是非常重要的考点,面试者应当熟练掌握BIO、NIO和AIO的区别,了解NIO的Buffer、Channel和Selector等组件的使用和原理,同时对Netty框架的特点和优势有深入的理解和实践,这样才能够在...
- **性能优化实践**:通过参数调整、代码优化等方式提高RPC框架的性能。 - **高级特性探索**:学习Netty中的高级特性,如自定义编解码器、HTTP/2支持等。 #### 五、总结 通过对Netty源码的深入剖析以及NIO技术的...
RPC(Remote Procedure Call)是一种进程间通信机制,允许在分布式环境中像调用本地函数一样调用远程计算机上的函数或方法。...理解这两个技术的原理,对于优化和开发分布式应用程序具有重要的实践意义。
- **丰富的示例代码**:Netty项目自带了大量的示例代码,这为初学者提供了很好的实践参考,帮助他们更快地理解和掌握Netty的核心概念和技术细节。 - **广泛的社区支持**:Netty拥有一个活跃的社区,不仅有大量的学习...
Netty通过使用池化技术,比如对象池和线程池,大大减少了资源消耗,这既包括CPU也包括内存。在内存拷贝方面,Netty通过零拷贝技术减少了不必要的数据复制,提高了效率。 Netty的高可用性和稳定性也非常重要。Netty...
4. **稳定性**:Netty 经过多年的发展和优化,已经在许多大型项目中得到验证,具有良好的稳定性和健壮性。 5. **灵活性**:Netty 的架构设计允许开发者自定义处理器链,方便地扩展功能。 在 "nettyPlayground-main...
通过阅读《Netty权威指南》第二版,开发者可以深入理解Netty的架构设计、最佳实践以及如何利用其特性来优化网络应用的性能。这本书全面覆盖了Netty的各个方面,对于任何想要掌握Netty的人来说,都是不可或缺的参考...
3. **创建Netty编码解码器**: 在Netty的ChannelPipeline中添加ProtobufDecoder和ProtobufEncoder,它们负责在消息发送前将其转换为ByteBuf,接收到ByteBuf后恢复为原对象。 4. **编写业务逻辑**: 在你的...
标题 "Netty相关文档" 暗示了我们要探讨...深入学习Netty,你需要掌握如何配置和使用这些组件,理解它们如何协同工作,以及如何通过源码调试和优化。同时,实践项目,结合博客文章和文档,可以加速学习进程,提升技能。
2. **高性能**:Netty对底层I/O进行了优化,例如使用NIO(非阻塞I/O)和Epoll(Linux下的高性能网络库),并且提供了零拷贝机制,减少了CPU的内存操作,提高了数据传输效率。 3. **易用性**:Netty提供了一系列预...
同时,研究Netty的性能优化技巧,如适当配置内存池,理解并使用水印策略等。 在实际项目中,Netty广泛应用于分布式系统、游戏服务器、流媒体服务、RPC框架等领域。熟练掌握Netty,不仅可以提升开发效率,还能构建出...
通过学习和实践"gameNettyDemo-master"这个项目,你可以深入了解Netty如何利用NIO实现高并发,并在实际项目中应用这些技术,提升服务器性能和稳定性。同时,也可以进一步研究Netty的其他高级特性,如零拷贝、线程池...
本项目包括服务端和客户端两部分,为理解 Netty 在即时通讯中的应用提供了实践基础。 1. **Netty 框架介绍** - Netty 是一个非阻塞的 I/O 框架,它基于 Java NIO(非阻塞 I/O)实现,提供了高性能、低延迟的网络...