`

MINA2的优化

 
阅读更多
mina2优化指南(摘抄自网络)

MINA默认配置的性能并不是很高的,部分原因是MINA目前还保留初期版本的架构,另外一个原因是因为JVM的发展。

首先我们关闭默认的ThreadModel设置

IoAcceptor acceptor = ...;
IoServiceConfig acceptorConfig = acceptor.getDefaultConfig();
acceptorConfig.setThreadModel(ThreadModel.MANUAL);


ThreadModel是一个很简单的线程实现,用于IoService。但是它实在太弱,以至于在并发环境产生大量问题。在MINA 2.0中,ThreadModel直接被取消。你应该使用ExecutorFilter来实现线程。

然后我们增加I/O处理线程(Article by Sparkle)
每一个Acceptor/Connector都使用一个线程来处理连接,然后把连接发送给I/O processor进行读写操作,我们只可以修改I/O processor使用的线程数,用以下代码设置

IoAcceptor acceptor = new SocketAcceptor(Runtime.getRuntime().availableProcessors() + 1, Executors.newCachedThreadPool());

当然是要将ExecutorFilter加入,上文已经很详细地描述了

acceptor.getDefaultConfig().getFilterChain().addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool());


笔者在开发过程中,多次遇到OutOfMemoryError,经过研究之后才发现原因。MINA默认是使用direct memory实现ByteBuffer池的方案(以下简称direct buffer),通过JNI在内存开辟一段空间来使用,该方案在早期的MINA版本中是一个非常好的特性,那是因为MINA开发初期,JVM并没有现在的强大,带有池效果的direct buffer性能比较好。但是当我们使用-Xms -Xmx等指令增加JVM可使用的内存,那仅仅增加了堆的内存空间,而direct memory的空间并没有增加,导致MINA实际使用的时候经常出现OutOfMemoryError。如果你的确想使用direct memory,可以通过-XX:MaxDirectMemorySize选项来设置。不过笔者不建议这样做,因为最新的测试表明,在现代的JVM里面,direct memory比堆的表现更差。这里可能有读者会觉得奇怪,为什么不用池,而要用堆呢,而且还需要gc。那是因为现在的JVM gc能力已经很强了,而且在并发环境里面,pool的同步也是一个性能的问题。我们可以通过这样的代码进行设置(Article by Sparkle)

ByteBuffer.setUseDirectBuffers(false);
ByteBuffer.setAllocator(new SimpleByteBufferAllocator());


MINA 2.0已经默认把直接内存分配改成堆,为了提供最好的性能和稳定性。

最后一条优化技巧就是,把你的应用部署在Linux上,并且打开Java NIO使用Linux epoll的功能。可能你还没听过epoll,但是你应该听过Lighttpd、Nginx、Squid等,得益于epoll,它们提供很高的网络性能,还占用非常少的系统资源。JDK6已经默认把epoll配置打开,因此笔者建议把你的应用部署在JDK6上面,也同时因为JDK6还有别的优化特性。如果你的应用必须部署在JDK5上,你也可以通过参数把epoll支持打开
分享到:
评论

相关推荐

    springboot 深度整合mina开箱即用

    **2. Mina框架解析** Mina(Minimal Asynchronous Network Library)是Apache软件基金会的一个开源项目,它提供了一个简单、高性能的API来处理网络通信。Mina支持多种协议,如TCP、UDP、HTTP、FTP等,可以用于构建...

    mina2技术知识

    MINA2(全称:Java Multi-Protocol Infrastructure)是Apache软件基金会的一个开源项目,主要针对网络应用程序开发,...对于想要涉足网络编程或优化现有网络服务的 Java 开发者来说,MINA2 是一个值得掌握的重要工具。

    mina2核心框架

    结合“资料_MINA(第三部分)”这个文件,我们可以深入学习MINA2的高级用法、优化技巧以及实际案例。文件可能涵盖了MINA2的高级主题,如性能调优、异常处理策略、自定义过滤器的实现以及与其他开源库的集成等。 总...

    mina2推送demo客户端

    MINA2提供了许多性能优化的手段,如缓冲区管理、心跳机制和连接管理等。在实际应用中,可以根据需求调整这些设置,以达到最佳性能。 总结,MINA2推送Demo客户端,尤其是"echo_client_udp",为我们提供了一个理解...

    mina2 源码 mina

    对于有经验的开发者,深入源码可以提供对MINA内部机制的洞察,从而更好地优化和定制自己的网络服务。 总之,Apache MINA2是一个强大的网络应用框架,它的源码和实例是宝贵的教育资源,有助于提升Java网络编程能力,...

    mina2.x开发示例

    在Mina2.x版本中,引入了更多的优化和改进,使得开发过程更为高效。 在Mina2.x开发示例中,通常会涉及到以下几个关键知识点: 1. **I/O模型**:Mina基于NIO(Non-blocking I/O)模型,允许单个线程处理多个连接,...

    Java mina2源码

    通过深入研究Mina2的源码,我们可以了解到如何优化网络通信性能,如何处理大规模并发连接,以及如何设计和实现自己的网络协议。源码分析还能帮助我们理解Java的多线程、并发控制和事件驱动编程等高级特性,提升我们...

    基于MINA构建简单高性能的NIO应用.pdf

    "优化" 标签则暗示了文档将提供关于提高MINA应用性能的指导,可能包括代码优化、系统调优、资源管理等方面的策略。 **知识点详解:** 1. **MINA框架介绍**:MINA提供了一套全面的网络通信库,包括用于TCP/IP和UDP/...

    Mina2中文文档

    - **状态机设计**:介绍了如何利用状态机模式优化Mina应用程序的状态管理。 #### Chapter 15 - 代理 - **代理支持**:探讨了Mina对代理服务器的支持情况,包括配置和使用方法。 #### Chapter 16 - JMX集成 - **...

    mina2资料-各种教程

    深入理解MINA的ByteBuffer和Java Nio ByteBuffer的区别,可以帮助开发者优化性能并减少内存拷贝。 线程模型是MINA的另一个关键配置项。MINA提供了多种线程模型,如简单的单线程模型、多线程模型以及Event-driven...

    MINA2 用户手册(中英文2个版本)加API(英文)

    MINA2,全称为“Java Multithreaded Network Application Framework”,是Apache软件基金会的一个开源项目,主要用于构建高性能、高可扩展性的网络应用。这个压缩包包含的资源是MINA2的用户手册,分别有中文和英文两...

    mina2 实例程序(socket通讯调用远程方法)

    《mina2实现Socket通信调用远程方法详解》 在当今的分布式系统中,远程方法调用(Remote Method Invocation,RMI)是常见的通信方式之一,它允许程序在不同的网络节点间透明地调用方法,极大地简化了分布式应用的...

    Mina2的文件上传示例

    Mina2是其更新版本,引入了更多的优化和新特性。在本示例中,我们将探讨如何使用Mina2实现文件上传功能。 文件上传是许多网络应用程序的核心部分,特别是在Web应用、文件共享或协作平台中。Mina2提供了异步非阻塞的...

    Mina2进阶

    《Mina2进阶》 Mina2是一个Java开发的网络通信框架,它提供了一种高效、可扩展的网络编程模型,广泛应用于服务器端开发,尤其是面向服务架构(SOA)和分布式系统中。Mina2的核心设计理念是解耦网络I/O与业务逻辑,...

    mina连接 mina心跳连接 mina断线重连

    2. **关闭连接**:一旦确定连接异常,应当立即关闭当前的IoSession。 3. **清理资源**:释放与旧连接相关的资源,如线程、内存等。 4. **重新连接**:创建新的连接尝试,这可能涉及到重试策略,如固定间隔重试、指数...

    apache-mina-2.0.4.rar_apache mina_mina

    这对于优化和重构Mina代码以提升性能将非常有帮助。 对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发...

    Apache mina2学习笔记DEMO

    在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...

    Apache Mina2服务器和客户端简单实例

    Apache Mina2是一个高度可扩展且高性能的网络通信框架,主要设计用于简化开发网络应用,如TCP/IP和UDP协议的服务端和客户端。它提供了一种事件驱动、非阻塞I/O模型,使得开发者能够更专注于业务逻辑,而不是底层的...

Global site tag (gtag.js) - Google Analytics