在JBoss Netty的网站上引用了一个2008年10月6号的测试报告,参见:
http://gleamynode.net/articles/2232/
http://www.jboss.org/netty/performance-1.html
http://www.jboss.org/file-access/default/members/netty/freezone/performance.pdf
通过这个报告,分析如下:
环境:
1.比较了Netty, Grizzly, MINA, NIO Framework, xSocket,基于2008/October/3rd的版本。
2.测试的客户机/服务器端都是双核机器。
3.客户机/服务器的操作系统都是:Linux 2.6.25.11-97.fc9 (Fedora 9)
4.服务器内存是6GiB, 客户机内存是3GiB
5.网络带宽是1G
配置:
1.“The number of I/O threads - the number of the CPU cores ”,那么大约也就是两三个。(这里有一个存疑地方,因为在以前自己测试Apache Mina的时候,发现在频繁的大并发量小消息处理情况下,selector的事件处理能力低下,随着Thread配置数量的增加其处理能力不断提高,这时候配置selector线程数量等于:(X * (the number of the CPU cores))+1)。
2.Handler的线程数量是:16
3.JDK版本:Sun JDK 1.6.0_07
4.JRE配置:-server -Xms2048m -Xmx2048m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods 这个配置是很合适的,和我们经过验证的配置是一致的。
测试:这个测试主要测试了Throughput随着客户端的增加而变化的情况。
Throughput Definition:In communication networks, such as Ethernet or packet radio, throughput or network throughput is the average rate of successful message delivery over a communication channel. This data may be delivered over a physical or logical link, or pass through a certain network node. The throughput is usually measured in bits per second (bit/s or bps), and sometimes in data packets per second or data packets per time slot.(http://en.wikipedia.org/wiki/Throughput)
定义:吞吐量是指在没有帧丢失的情况下,设备能够接受的最大速率。 (http://baike.baidu.com/view/188722.htm)
这个测试报告主要是客户机、服务器在同一个机器上和客户机/服务器分开在不同的机器上两种模式下的测试结果:
1.随着消息的包不断增加,在达到最大限度之前,Throughput以同样的倍数在增加,可以得出结论:在消息大小固定时通信良好,稳定性极佳。Throughput会因为消息的大小变化而发生震荡。还有一个有意思的结论:Throughput不会因为并发链接数的变化而变化,但是会紧随通信消息内容的大小变化而变化。
2.一个NIO Server的服务器端能够并发支持5000到10000个链接。
3.测试结果可以看出,消息内容越大,框架处理的能力越稳定。(猜测:可能消息越小,引起的线程的切换越频繁,Buffer的各项操作也越频繁。)
4.对于1G的网络带宽,随着消息的大小等的增加,框架的throughput的能力,loopback模式下最大的数值是600MiB/s;而client/server网络模式下最大是100MiB/s,这个数值仅为带宽1G的10%。可见在网络环境下,throughput受制于网络因素的影响还是比较大的。
5.从这个测试结果来看,各种NIO框架(Netty, Grizzly, MINA, NIO Framework, xSocket)的throughput能力相差不大。