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支持打开
分享到:
相关推荐
包含用如何用MINA建立简单的NIO应用例子(一个时间服务器响应多个客户端的请求),以及和如何优化使你的NIO服务器达到性能最佳
springboot 深度整合mina开箱即用,适合新手上来研究。希望下载过的同学能来评论。
http://knight-black-bob.iteye.com/blog/2370938 推送sdk (类似百度 推送 ) android mina (待优化... ) 本demo 研究的是原理,不要计较太多。。。。 至于token生成,service 保活,定时启动 不做说明。
mina-touch mina-touch,一个方便、轻量的 小程序 手势事件监听库 事件库部分逻辑参考alloyFinger,在此做出声明和感谢 change log: 2019.03.10 优化监听和绘制逻辑,动画不卡顿 ...demo2: 监听 pinch 缩放 和 rotate
ssm-mina 服务端目标: 客户端目标: 运维目标: 整体目标: question 1.ioHander内传递数据 ************************************************************ 忽略文件: 规则: 下面我们看看常用的规则: /mtk/ ...
Mina-wear-mask 头像加口罩小程序-基于uniapp使用vue快速实现。 充分利用的流量运营思维包括取名截流,公众号文章引流,广告放置策略优化,逐步获得10w +用户,获取广告收入4K +。核心代码开发时间为两个周末。 请...
昨天有个朋友问题对mina是否有什么优化的资料,他这边一个系统压到500并发就上不去了,开始在看中国好声音,也没多想,直接说我这边没有。 昨天有个朋友问题对mina是否有什么优化的资料,他这边一个系统压到500...
Mina-Gulp-Cli 一,针对哪些需求? 快速建造功能强大还轻量的微信小程序开发环境 不推崇其他框架风格在小程序中的编译套用 ,最小程度的代码入侵,让微信小程序的本身被你安排得明明白白 基于ES6 + / Sass环境进行...
开发基本框架(MINA框架) (此图片来源于网络,如有侵权,请联系删除! ) └─ Project-folder/ ·································· 项目所在目录 ├─ pages/ ········...
简介2.相关工作3.方法3.1生成器模块3.2判别模块3.3优化4.实验4.1实验实现细节4.2生成评估4.3判别评估5.结论论文部分英文解释论文翻译参考 Joint Discriminative and Generative Learning for Person Re-...
JVM优化 数据结构算法 多线程高级 MINA Netty NIO 软件项目,代码管理 Markdown Maven SVN Git 码云 github Jenkins Sonar Part2: 热门框架&分布式服务 热门技术框架 Spring SpringMVC Mybatis Mybatis-Plus Spirng...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...