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

2023-11-18

压测方案
  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)

转载于:https://www.cnblogs.com/405845829qq/p/6029942.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Netty NIO 框架性能压测-短链接-对比Tomcat 的相关文章

  • 如何使用 IO Codenameone 发布图片/图像

    因为 codenameone 不能使用外部库 HttpConnection 所以我必须使用 Codenameone 提供的内部库 API 只是我已经设法使用 ConnectionRequest 将数据发布到格式化文本 字符串 我想知道是否有
  • 在 Java 中重置 Graphics2D 对象

    我正在用 Java 尝试 Graphics2D 但像往常一样 我被困住了 P 问题是 假设我有这个代码 Graphics2D g Graphics2D this getGraphics Inside a JFrame g rotate Ma
  • 将 Spring Boot 应用程序部署到 Heroku 失败并显示“无效标志:--release -> [帮助 1]”

    当我尝试将代码部署到 Heroku 时 通过git push heroku master 我收到 Maven 错误 remote ERROR Failed to execute goal org apache maven plugins m
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • java.sql.SQLException: - ORA-01000: 超出最大打开游标数

    我收到 ORA 01000 SQL 异常 所以我有一些与之相关的疑问 最大打开游标是否与 JDBC 连接数完全相关 或者它们也与我们为单个连接创建的语句和结果集对象相关吗 我们正在使用连接池 有没有办法配置数据库中语句 结果集对象的数量 如
  • 小米和oppo等中国ROM上的工作管理器,在电池优化时,将工作的计划延迟增加几个小时

    小米和 Oppo 等中国 ROM 上的工作管理器在进行电池优化时 会将计划的工作延迟增加几个小时 但是 我注意到一些应用程序即使在电池优化下也能够让计划的作业安静地完美运行 我注意到的一个区别是 它们每次运行作业时都会显示一条通知 那么这是
  • 如何提高 Guice 启动时的性能

    好吧 我知道我的计算不客观等等 但无论如何 我讨厌在执行单元测试时等待这么多时间 我的 guice swing 应用程序需要大约 7 秒来初始化 这是一个简单的 IRC 客户端 在那一刻 没有打开连接 我什至还没有调用任何 java io
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 在 Java 和 PHP 之间加密/解密字符串

    我使用 AES 加密来加密和解密服务器端的 php 和 Android 应用程序 作为客户端 之间的字符串 PHP 中的加密字符串为 HaxRKnMxT24kCJWUXaVvqDHahzurJQK sYA4lIHql U 在 Java 中是
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 如何对JConsole的密码文件的密码进行加密

    我正在使用 JConsole 访问我的应用程序 MBean 并使用 password properties 文件 但根据 Sun 的规范 该文件仅包含明文格式的密码 com sun management jmxremote password
  • SOAP Web 服务中的用户身份验证

    我提出了一个关于JAX WS 身份验证和授权 如何 https stackoverflow com questions 5314782 jax ws authentication and authorization how to 讨论了安全
  • 在Java中一个接一个地播放WAV文件

    我正在尝试玩几个WAV http en wikipedia org wiki WAV文件一个接一个 我尝试了这个方法 for String file audioFiles new AePlayWave file start 但这会同时播放它
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • 在调试模式下,哪些代码更改会自动反映在 Eclipse 中?

    我使用 eclipse 用于编写 调试 作为 IDE 在调试模式下 当我进行一些更改 例如初始化局部变量 时 它们会自动反映 但其他更改例如更改静态变量的值 有时我会收到一条消息 说我需要重新启动虚拟机 有时则不需要 现在的问题是哪些类型的
  • Spring Boot 健康执行器 - 什么时候上线?

    我找不到任何有关 Springs Health Actuator 何时返回 UP 状态的文档 你能依靠一切吗 Components正在初始化 会不会 Controller准备好满足请求了吗 为了测试应用程序上下文是否已加载 您可以执行此自定
  • 如何使用自定义转换器访问 jOOQ 生成的例程字段作为值?

    我在访问生成例程的字段时遇到问题PL pgSQL 用户定义函数 返回JSON 数据类型结果 已经提到this https stackoverflow com q 62535195 6805866问题 这是我的结果get all orders
  • 跳过一行GridBagLayout

    我在 JFrame 上使用 GridBagLayout 我希望能够跳过一两行 但将这些行显示为空白 然后在这些行后面有一个按钮 我在文档中找不到任何方法来执行我所描述的操作 有谁知道我可以执行此操作的任何方法吗 发现它比添加空组件干净得多
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram

随机推荐

  • SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else

    场景 设计模式 策略模式在Java中的使用示例 设计模式 策略模式在Java中的使用示例 java 策略模式示例 霸道流氓气质的博客 CSDN博客 上面讲了策略模式在Java中的使用示例 下面看一个在SpringBoot中的实际使用示例 业
  • 实时监听EditText内容变化,修改监听软键盘

    主要是addTextChangedListener方法的使用 aswerEdittext addTextChangedListener new TextWatcher 编辑框的内容发生改变之前的回调方法 Override public vo
  • 浅谈设计原则

    1单一职责原则 什么是单一职责原则 在我理解看来就是一个东西如果发生问题那么就有且仅有一个原因导致它发生问题 它的准确解释就是 就一个类而言 应该仅有一个引起它变化的原因 如果一个类承担的职责过多 就等于耦合度加大 当变化发生时 设计会受到
  • JAVA-1001. 害死人不偿命的(3n+1)猜想

    卡拉兹 Callatz 猜想 对任何一个自然数n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到n 1 卡拉兹在1950年的世界数学家大会上公布了这个猜想 传说当时耶鲁大学
  • CentOS安装指定版本的Docker(包括卸载)

    一 Docker安装 1 配置指定的yum源 wget P etc yum repos d https mirrors aliyun com docker ce linux centos docker ce repo 2 查看yum源支持的
  • React使用antd里面的Table组件,表格可自由控制列宽

    import React Component from react import Resizable from react resizable import react resizable css styles css 要引入样式 impo
  • 到底学机械好还是学计算机好,大学同学一个选择学机械,另一个学计算机,对比5年后收入蒙了...

    原标题 大学同学一个选择学机械 另一个学计算机 对比5年后收入蒙了 现如今上大学 你所选择的专业对以后的职业规划还是有挺大的影响 而互联网可以说是这些年最热门的专业 所以很多大学生选择学计算机还是挺多的 基本上计算机系的大学生也是最多的 而
  • 腾讯云存储COS

    简介 对象存储 Cloud Object Storage COS 是由腾讯云推出的无目录层次结构 无数据格式限制 可容纳海量数据且支持 HTTP HTTPS 协议访问的分布式存储服务 腾讯云 COS 的存储桶空间无容量上限 无需分区管理 适
  • 低功耗蓝牙(BLE)你入门了吗

    前言 蓝牙低功耗 Bluetooth Low Energy 或称Bluetooth LE BLE 旧商标Bluetooth Smart 用于医疗保健 运动健身 安防 工业控制 家庭娱乐等领域 在如今的物联网时代下大放异彩 扮演者重要一环 是
  • Linux中断处理程序框架

    设备的中断会打断内核进程的正常调度和运行 系统对更高吞吐率的追求势必要求中断服务程序尽量短小精悍 但是 这个良好的愿望往往与现实不吻合 在多数真实的系统中 当中断到来时 要完成的工作往往并不是短小的 它可能要进行大量的耗时处理 为了在中断执
  • Bash中各种括号

    Bash中有各种括号 包括单小括号 双小括号 单中括号 双中括号 单大括号 而且它们之间很容易混淆 所以很有必要总结一下它们的用法 1 的用法 单个小括号用来创建一个子shell 例如 pwd home xfeng cd tmp pwd t
  • matlab智能算法之模拟退火算法

    智能算法之模拟退火算法 1 起源 2 物理退火流程 2 1 加温过程 2 2 等温过程 2 3 冷却过程 2 4 组合优化与物理退化 3 原理 3 1 算法核心迭代 3 2 具体流程 4 案例 4 1 求解n元函数的极小值 4 2 求解二元
  • Java 多线程编程

    Java给多线程编程提供了内置的支持 一个多线程程序包含两个或多个能并发运行的部分 程序的每一部分都称作一个线程 并且每个线程定义了一个独立的执行路径 多线程是多任务的一种特别的形式 但多线程使用了更小的资源开销 这里定义和线程相关的另一个
  • 代码整洁之道1-6章总结

    第一章 整洁代码 总的来说就是 整洁的代码有益于团队的测试开发 往大了说会影响公司的发展 作者列举了几个公司的反面教材 由于代码不够整洁 无法继续维护 导致公司倒闭的情况 迭代周期越来越长 所以说作为一个程序员 都有义务和责任去尽量写出简洁
  • 在服务中启动带有界面的程序

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 参考文章 http blog csdn net goingup article details 2932752 reply 在服务中启动带
  • android 中文权限解释

    PermissList Key android permission ACCESS CHECKIN PROPERTIES Title 访问检入属性 Memo 允许对检入服务上传的属性进行读 写访问 普通应用程序不能使用此权限 Level 0
  • linux脚本加载bashprofile,linux环境变量之profile .bash_profile .bash_login .profile .bashrc 加载详解...

    前言 这里讨论的shell都是bash shell 使用哪种shell形式可以通过修改 etc passwd 文件配置 bash sh csh 讨论的配置文件包括 etc profile etc bashrc bash login bash
  • 【Linux】Vmware虚拟机安装教程

    目录 一 下载Vmware和CentOS 二 使用Vmware创建虚拟机 1 创建虚拟机 2 稍后安装镜像 3 选择对应镜像版本 4 输入虚拟机名称和保存地址 5 指定虚拟机磁盘大小 6 完成 三 安装CentOS 1 查看cpu是否开启虚
  • 15.Linux多线程编程

    一 线程理论基础 1 定义 线程技术早在60年代就被提出 但真正应用多线程到操作系统中去 是在80年代中期 solaris是这方面的佼佼者 传统的Unix也支持线程的概念 但是在一个进程中只 允许有一个线程 这样多线程就意味着多进程 现在
  • Netty NIO 框架性能压测-短链接-对比Tomcat

    压测方案 准备多个文件大小分别为 1k 10k 100k 300k 使用ab分别按 50 2000 按50逐渐叠加 压测服务 每次请求10W次 硬件信息 CPU Intel R Xeon R CPU 1 86GHz 4 4G 统计脚本 gr