1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

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

本帖由 漂亮的石头2017-04-17 发布。版面名称:软件资讯

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    487,979
    赞:
    47
    经过不泄努力和无数轮对性能稳定性和功能的测试,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 方法执行完成后连接没有连上,导致的通信异常.
    Voovan v1.5 发布,高效堆外内存管理,性能不打折扣下载地址
     
正在加载...