Netty NIO 框架性能压测-短链接-对比Tomcat

摘要:
压力测试结果表明,在小文件的情况下,Netty的性能优于Tomcat。qps可以增加大约50%,并且比Tomcat更稳定。当并发量增加时,Netty比Tomcat更稳定。WAIT的恢复时间可以提高系统的并发性。在大文件的情况下,Netty没有优势,线程池也不如Tomcat。Tomcat的内存回收更好。
压测方案
  1. 准备多个文件大小分别为 1k 10k 100k 300k
  2. 使用ab分别按 [50,2000](按50逐渐叠加)压测服务,每次请求10W次
  3. 硬件信息:CPU:Intel(R) Xeon(R) CPU 1.86GHz ×4 4G
  4. 统计脚本:grep "Requests per second:" 300k_* | awk -F':' '{print substr($1,6),$3}'|sort -n
  5. 1k 10k 压测的时候load维持在3左右,100k 300k的load飙升到5 。
压测结果
  1. 在小文件(小于10k)情况下Netty的性能要优于Tomcat,qps大概能提升50%,而且比Tomcat稳定。
  2. 在并发量增大时候Netty表现得比Tomcat稳定,通过修改内核加快TIME_WAIT的回收时间,从而提高系统的并发量。
  3. 在大文件的情况下Netty没有任何优势,而且线程池相关的没有Tomcat优秀,Tomcat的内存回收更优秀些。
  4. 结论:Netty适合搭建轻量级的应用,特别适合传输内容少,但是并发量非常高的应用。或者是大文件下载服务器。

 

修改TIME_WAIT回收时间
vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
 
/sbin/sysctl -p

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

相关数据(下 载)
===== Netty =====
====== 1k ======
50 15661.50 [#/sec] (mean)
100 13429.52 [#/sec] (mean)
150 15385.05 [#/sec] (mean)
200 15598.34 [#/sec] (mean)
250 15135.97 [#/sec] (mean)
300 13494.79 [#/sec] (mean)
350 15102.49 [#/sec] (mean)
400 14614.11 [#/sec] (mean)
450 13463.52 [#/sec] (mean)
500 13447.48 [#/sec] (mean)
550 13126.29 [#/sec] (mean)
600 11108.25 [#/sec] (mean)
650 11073.34 [#/sec] (mean)
700 14518.88 [#/sec] (mean)
750 13409.66 [#/sec] (mean)
800 13060.86 [#/sec] (mean)
850 11938.25 [#/sec] (mean)
900 13133.88 [#/sec] (mean)
950 13670.75 [#/sec] (mean)
1000 13803.70 [#/sec] (mean)
1050 16414.20 [#/sec] (mean)
1100 14770.09 [#/sec] (mean)
1150 11108.65 [#/sec] (mean)
1200 13294.72 [#/sec] (mean)
1250 13448.52 [#/sec] (mean)
1300 15128.31 [#/sec] (mean)
1350 13367.31 [#/sec] (mean)
1400 14277.91 [#/sec] (mean)
1450 13193.80 [#/sec] (mean)
1500 14272.63 [#/sec] (mean)
1550 11004.96 [#/sec] (mean)
1600 13438.72 [#/sec] (mean)
1650 13105.43 [#/sec] (mean)
1700 13653.39 [#/sec] (mean)
1750 13366.72 [#/sec] (mean)
1800 12727.40 [#/sec] (mean)
1850 13075.32 [#/sec] (mean)
1900 11103.91 [#/sec] (mean)
1950 13463.83 [#/sec] (mean)

====== 10k ======
50 7280.51 [#/sec] (mean)
100 9089.69 [#/sec] (mean)
150 9423.90 [#/sec] (mean)
200 8130.07 [#/sec] (mean)
250 8142.88 [#/sec] (mean)
300 8311.20 [#/sec] (mean)
350 8512.20 [#/sec] (mean)
400 7940.84 [#/sec] (mean)
450 7823.32 [#/sec] (mean)
500 8284.60 [#/sec] (mean)
550 8785.93 [#/sec] (mean)
600 7725.20 [#/sec] (mean)
650 7753.23 [#/sec] (mean)
700 8184.61 [#/sec] (mean)
750 8027.75 [#/sec] (mean)
800 7934.49 [#/sec] (mean)
850 7792.94 [#/sec] (mean)
900 7734.34 [#/sec] (mean)
950 7118.27 [#/sec] (mean)
1000 7866.23 [#/sec] (mean)
1050 7724.82 [#/sec] (mean)
1100 7734.17 [#/sec] (mean)
1150 7688.83 [#/sec] (mean)
1200 7359.90 [#/sec] (mean)
1250 7526.02 [#/sec] (mean)
1300 7515.24 [#/sec] (mean)
1350 6639.51 [#/sec] (mean)
1400 7902.36 [#/sec] (mean)
1450 7447.63 [#/sec] (mean)
1500 8216.35 [#/sec] (mean)
1550 8133.42 [#/sec] (mean)
1600 7728.28 [#/sec] (mean)
1650 7724.26 [#/sec] (mean)
1700 7622.26 [#/sec] (mean)
1750 7848.25 [#/sec] (mean)
1800 7715.88 [#/sec] (mean)
1850 7594.04 [#/sec] (mean)
1900 8017.95 [#/sec] (mean)
1950 7992.33 [#/sec] (mean)

====== 100k ======
50 1079.56 [#/sec] (mean)
100 1078.64 [#/sec] (mean)
150 1080.74 [#/sec] (mean)
200 1074.42 [#/sec] (mean)
250 1082.69 [#/sec] (mean)
300 1084.87 [#/sec] (mean)
350 1080.00 [#/sec] (mean)
400 1046.49 [#/sec] (mean)
450 1050.25 [#/sec] (mean)
500 1052.89 [#/sec] (mean)
550 1046.49 [#/sec] (mean)
600 1059.16 [#/sec] (mean)
650 1051.33 [#/sec] (mean)
700 1050.23 [#/sec] (mean)
750 1045.41 [#/sec] (mean)
800 1054.51 [#/sec] (mean)
850 1034.61 [#/sec] (mean)
900 1045.55 [#/sec] (mean)
950 1036.36 [#/sec] (mean)

====== 3000k ======
50 345.95 [#/sec] (mean)
100 355.97 [#/sec] (mean)
150 361.02 [#/sec] (mean)
200 363.39 [#/sec] (mean)
250 358.99 [#/sec] (mean)
300 332.52 [#/sec] (mean)
350 320.66 [#/sec] (mean)
400 315.49 [#/sec] (mean)
450 305.72 [#/sec] (mean)
900 304.57 [#/sec] (mean)

===== Tomcat =====
====== 1k ======
50 8808.85 [#/sec] (mean)
100 9933.93 [#/sec] (mean)
150 11037.66 [#/sec] (mean)
200 10857.99 [#/sec] (mean)
250 10389.63 [#/sec] (mean)
300 11054.51 [#/sec] (mean)
350 10397.66 [#/sec] (mean)
400 10617.54 [#/sec] (mean)
450 9600.62 [#/sec] (mean)
500 10822.00 [#/sec] (mean)
550 10815.92 [#/sec] (mean)
600 11385.86 [#/sec] (mean)
650 11094.66 [#/sec] (mean)
700 10819.33 [#/sec] (mean)
750 10821.28 [#/sec] (mean)
800 9009.25 [#/sec] (mean)
850 10814.18 [#/sec] (mean)
900 9542.68 [#/sec] (mean)
950 11095.51 [#/sec] (mean)
1000 10811.53 [#/sec] (mean)
1050 11084.72 [#/sec] (mean)
1100 11089.07 [#/sec] (mean)
1150 9590.15 [#/sec] (mean)
1200 13826.40 [#/sec] (mean)
1250 8186.03 [#/sec] (mean)
1300 13961.24 [#/sec] (mean)
1350 11077.12 [#/sec] (mean)
1400 16536.29 [#/sec] (mean)
1450 11430.66 [#/sec] (mean)
1500 10817.56 [#/sec] (mean)
1550 16195.09 [#/sec] (mean)
1600 17205.66 [#/sec] (mean)
1650 13300.61 [#/sec] (mean)
1700 11061.43 [#/sec] (mean)
1750 10837.05 [#/sec] (mean)
1800 9786.94 [#/sec] (mean)
1850 10808.81 [#/sec] (mean)
1900 13019.67 [#/sec] (mean)
1950 10090.06 [#/sec] (mean)

====== 10k ======
50 5513.00 [#/sec] (mean)
100 7093.53 [#/sec] (mean)
150 9134.78 [#/sec] (mean)
200 8910.81 [#/sec] (mean)
250 9240.74 [#/sec] (mean)
300 7805.80 [#/sec] (mean)
350 8661.73 [#/sec] (mean)
400 8835.57 [#/sec] (mean)
450 7966.94 [#/sec] (mean)
500 8322.71 [#/sec] (mean)
550 6575.24 [#/sec] (mean)
600 8726.30 [#/sec] (mean)
650 8108.30 [#/sec] (mean)
700 9226.79 [#/sec] (mean)
750 8834.83 [#/sec] (mean)
800 8386.70 [#/sec] (mean)
850 8380.58 [#/sec] (mean)
900 8323.48 [#/sec] (mean)
950 9060.00 [#/sec] (mean)
1000 7213.51 [#/sec] (mean)
1050 9504.06 [#/sec] (mean)
1100 9381.86 [#/sec] (mean)
1150 8839.41 [#/sec] (mean)
1200 9760.02 [#/sec] (mean)
1250 9476.96 [#/sec] (mean)
1300 8366.04 [#/sec] (mean)
1350 9651.87 [#/sec] (mean)
1400 9186.07 [#/sec] (mean)
1450 9600.16 [#/sec] (mean)
1500 8289.33 [#/sec] (mean)
1550 9399.26 [#/sec] (mean)
1600 8205.92 [#/sec] (mean)
1650 8306.61 [#/sec] (mean)
1700 9464.74 [#/sec] (mean)
1750 8682.26 [#/sec] (mean)
1800 9589.63 [#/sec] (mean)
1850 8315.31 [#/sec] (mean)
1900 9174.38 [#/sec] (mean)
1950 8956.78 [#/sec] (mean)

====== 100k ======
50 1033.41 [#/sec] (mean)
100 1054.92 [#/sec] (mean)
150 1061.72 [#/sec] (mean)
200 1075.20 [#/sec] (mean)
300 373.05 [#/sec] (mean)
350 375.34 [#/sec] (mean)
400 376.29 [#/sec] (mean)
450 376.51 [#/sec] (mean)
500 377.04 [#/sec] (mean)
550 377.09 [#/sec] (mean)
650 363.08 [#/sec] (mean)
700 368.69 [#/sec] (mean)

====== 300k ======
50 354.93 [#/sec] (mean)
100 361.82 [#/sec] (mean)
150 366.71 [#/sec] (mean)
200 369.58 [#/sec] (mean)
250 372.58 [#/sec] (mean)
300 374.43 [#/sec] (mean)
350 375.92 [#/sec] (mean)
400 376.23 [#/sec] (mean)
450 376.93 [#/sec] (mean)
500 376.61 [#/sec] (mean)
550 377.67 [#/sec] (mean)
600 372.58 [#/sec] (mean)

免责声明:文章转载自《Netty NIO 框架性能压测-短链接-对比Tomcat》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇spring事务配置步骤Android二维码功能实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Centos8的网络管理

注:这是笔者整合完成,如有侵权,请及时告知 centos 8默认只能通过NetworkManager.service(简称NM)进行网络配置,没有传统的network.service。但是centos 8依然支持network.service,只是默认没有安装,具体方法为:dnf install network-scripts -y,不过官方已明确在下一个...

Linux下防御ddos攻击

导读 Linux服务器在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等。通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长。比较彻底的解决方法是添置硬件防火墙。不过,硬件防火墙价格比较昂贵。可以考虑利用Linux 系统本身提供的防火墙功能来防御。 SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立...

data.table包使用总结

装载 作者:kicilove  来源:CSDN  原文:https://blog.csdn.net/kicilove/article/details/76060980?utm_source=copy  data.table包使用总结R中的data.table包提供了一个data.frame的高级版本,让你的程序做数据整型的运算速度大大的增加。data.t...

matplotlib添加子图(拼图功能)

  我们已经知道,matplotlib是python中的一个十分好用的作图库,它的简单的使用方法可以在之前的随笔中找到。传送门:https://www.cnblogs.com/chester-cs/p/11879444.html   之前没有涉及到的是一个用途十分广泛的功能:子图(拼图功能),想象我们有四个对比曲线图,是一个问题不同的算法实现结果。假如一个...

临时解决linux下time wait问题

 通过 netstat  -anp | grepTIME_WAIT | wc -l 命令查看数量,发现TIME_WAIT的连接数量超过了阈值   1、初步怀疑是程序没有关闭连接,codereview了两遍,发现,已经正常关闭。 2、网上看TIME_WAIT产生的原因,可能是因为服务器主动关闭连接导致TIME_WAIT产生。 3、查找TIME_WAIT解决...

(转)linux 内存管理——内核的shmall 和shmmax 参数

内核的 shmall 和 shmmax 参数 SHMMAX= 配置了最大的内存segment的大小 ------>这个设置的比SGA_MAX_SIZE大比较好。SHMMIN= 最小的内存segment的大小 SHMMNI= 整个系统的内存segment的总个数 SHMSEG= 每个进程可以使用的内存segment的最大个数配置信号灯( semphor...