设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 软件追踪 查看内容

Voovan v1.5发布,高效堆外内存管理,性能不打折扣

2017-4-17 22:30| 发布者: joejoe0332| 查看: 650| 评论: 0|原作者: oschina|来自: oschina

摘要: 经过不泄努力和无数轮对性能稳定性和功能的测试,Voovan 为您带来了全新的1.5版本.这是 Voovan 具有里程碑意义的版本,经过完成测试,并且已经在多个实际项目中大量的使用,其稳定性和高性能特性已经得到了验证。 ...

经过不泄努力和无数轮对性能稳定性和功能的测试,Voovan 为您带来了全新的1.5版本.这是 Voovan 具有里程碑意义的版本,经过完成测试,并且已经在多个实际项目中大量的使用,其稳定性和高性能特性已经得到了验证。

在这个版本中大量使用 Unsafe操作和堆外内存,经过测试(代码中的测试用例配合 jvisual查看)堆内的内存使用量控制在25m以内,对堆外的内存的释放支持手工和 jvm 自动释放两种方式。

在socket通信的缓冲区的内存管理上深度使用堆外内存和零拷贝,并在使用完成后手工释放,这样堆外内存的使用量也一直是趋于稳定低水平,不在等待 jvm 释放。

目前 Voovan 已经在 Dockerfly 开源项目中使用

从这个版本开始,框架的模型移机类和方法结构将会稳定下来,如非性能的要求不会做改动了。小伙伴门可以放心的使用咯。

文档入口:Voovan一步步入门

在这里感谢一直关注并为 Voovan 发展提供支持的各位朋友,同时感谢开源中国提供 GIT 服务支持。

重要更新内容:

一、重构了ByteBufferChannel类,将 ByteBufferChannel 修改成非堆内存的形式,使用Unsafe 带来的内存使用完及释放,大幅度减少密集的高并发场景下的 gc 的次数,经过估算和测试 full gc的次数将会下降为原来的1/3.

        1.Socket 异步通信优化内存消耗,10w连接通信后,内存控制控制在90m。

        2.并增加 readLine 和 readSplit 方法

        3.并增加 saveToFile 方法 

二、为ByteBufferChannel 增加 release() 用于手工释放堆外内存.。

三、由于 jvm 在获取属性和方法时会带来较大的瓶颈,在高并发场景下会被方法,顾优化反射工具类的性能,连续多次通过 TReflect 类获取反射属性和方法时性能大幅度提升使其不在成为性能瓶颈。

四、Socket 通信,如果没有执行分割器的情况下默认分割器由原来的超时分割器 更换到 透传分割器。

五、优化 HttpParser 手动释放临时的ByteBufferChannel,减少 gc 停顿时间。

六、如果在过滤器的 onRequest 方法中修改了response参数的 body ( 即:response.body().size()>0 ),则不会执行路由处理,整个过滤器执行完成后,返回response.用于对权限控制的处理. imp: Body 对象的 getGZipedBody方法删除。为大家提供权限管理控制的点。

七、将getParameterAsObject 重命名为 getAllParameterAsObject, 用于将 HTTP 请求的所有参数, 转换成一个 Java 对象,增加 getParameterAsObject 用于将 HTTP 请求的一个参数,使用 JSON 转换成一个 Java 对象。

本次更新带来55项优化、bug 修复、新增等内容

增加的内容

  • add: TByteBuffer 增加释放内

  • add: 增加TrasnferSplitter透传过滤器,没有进行消息分割,收到即发送存函数 imp: 优化 HTTP 报文解析,采用流的形式,节省内存

  • add: ByteBufferChannel新增堆外内存支持手动释放,手动释放可减少 GC 停顿时间,如果不手动释放将会自动释放.

  • add: TFile 增加getLineSeparator(), 获取系统默认的换行符

  • add: TFile 增加getTemporaryPath()方法,获取系统临时文件目录

  • add: ByteBufferChannel 增加 release() 用于手工释放堆外内存.

  • add: 增加 readLine 和 readSplit 方法

优化的内容

  • imp: 优化反射工具类的性能

  • imp: 优化线程池 imp: 优化异步通信

  • imp: 优化注释并重构

  • imp: 对异步通信的内存进行进一步优化,减少 gc,提升性能.

  • imp: Socket 异步通信优化内存消耗,10w连接通信后,内存控制控制在90m

  • imp: 修复HttpClient.loadStream方法,在连接断开内存释放后抛出异常

  • imp: 优化ByteBufferChannel类的各种操作方法,在内存已释放的情况下抛出MemoryReleasedException异常

  • imp: Socket异步通信优化

  • imp: TReflect 类优化,提升 findField 和 findMethod 的性能.

  • imp: 优化 HTTP 报文解析

  • imp: Socket 通信,如果没有执行分割器的情况下默认分割器由原来的超时分割器 更换到 透传分割器

  • imp: 中间的临时数据的保存都使用堆外内存,减少堆内内存的使用,减少 gc 触发频率

  • imp: 优化 Socket 异步通信,在 socket 关闭的时候使用ByteBufferChannel手动释放

  • imp: 优化 HttpParser 手动释放临时的ByteBufferChannel,减少 GC 停顿时间.

  • imp: 优化 HTTP 报文解析,采用流的形式,节省,支持大文件上传

  • imp: TEnv 中文件操作相关的方法全部移动到 TFile

  • imp: ByteBufferChannel 优化, 并增加 saveToFile 方法

  • imp: 采用 RandomAccessFile 优化 TFile 类

  • imp: 优化 ByteBufferChannel

  • imp: 完成 SSL unwarp 操作的提前,收到消息后直接解析,这样在 session 中访问都是可用的信息.

  • imp: 优化 BytebufferChannel 的异步操作

  • imp: MimeFileRouter类内存优化

  • imp: 优化HttpMessageSplitter的性能,减少对堆内存的消耗

  • imp: 增加 TByteBuffer 的单元测试

  • imp: 优化 reallocate 和 moveDate 方法使其支持两种类型的 ByteBuffer

  • imp: 将 ByteBufferChannel 修改成非堆内存的形式

  • imp: 优化 Socket 通信,确立两种模式[分割器模式, 缓冲区模式]

  • imp: 如果在过滤器的 onRequest 方法中修改了response参数的 body ( 即:response.body().size()>0 ),则不会执行路由处理,整个过滤器执行完成后,返回response.用于对权限控制的处理. imp: Body 对象的 getGZipedBody方法删除.

  • imp: 将getParameterAsObject 重命名为 getAllParameterAsObject, 用于将 HTTP 请求的所有参数, 转换成一个 Java 对象 imp: 增加 getParameterAsObject 用于将 HTTP 请求的一个参数,使用 JSON 转换成一个 Java 对象

BUG修复

  • fix: 修复 WebsocketParser 后释放 payload 导致的异常

  • fix: 修复 netty 测试用例 bug

  • fix: 修复反射类TReflect的getObjectFromMap方法,对 null 的支持

  • fix: 修复 readHead 和 readEnd 方法写入时没有从dst 对象的 position开始,而是从头开始的问题.

  • fix: 修复演示页面地址.

  • fix: MessageLoader 中对于 useSpliter 的异常

  • fix: HttpClient.loadStream 没有切换导非分割器模式导致的异常

  • fix: JSONDecode 中 字符串扫描结束并未退出循环,导致的死循环问题

  • fix: http post请求参数缺少第一个字母的问题

  • fix: http 使用multipart/form-data提交时 Content-type 中没有 boundary的问题

  • fix: 修复 http 响应在没有报文实体内容时还返回 Chunked,导致的解析异常问题

  • fix: 修复 JSON 解包时到字符串尾部依旧不退出循环的问题 add: 新增特性,过滤器返回位置为0时,不对 bytebufferchannel 的缓冲数据做修改

  • fix: 修复TStream.readLine方法 某些特殊情况会导致死循环的 bug

  • fix: 修复IoSession中 read 方法对于异常处理的 bug

  • fix: 修复ByteBuffer出现的error for object 0x7fb596675380: pointer being freed was not allocated异常 imp: 优化 AioSocket.close 方法对连接状态的判断

  • fix: 移除 IoSession 中 sendSSL 和 readSSL,框架根据通信类型自动选择发送是 ssl 还是直接发送.

  • fix:Body 的 read, compress, free 方法的 bug 处理.

  • fix: ByteBufferChannel不会同 gc 一起被自动释放的问题

  • fix: 修复 EventProcess 没有检查连接状态的bug

  • fix: 修复同步通信的 syncStart 方法执行完成后连接没有连上,导致的通信异常.


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部