Netty websocket server压力测试
压测客户端和服务器端在同一台pc上。Pc配置:
AMD A10-5800K APU with Radeon(tm) HD Graphics 3.80Ghz 四核
4G RAM
西数WDC WD10EZEX-60ZF5A0 ( 1 TB / 7200 转/分) 这个可以不写的
主要的测试目标分为:
1. 服务器端在一定时间内可接受客户端空闲连接的数量/峰值;
每次建立tcp连接(包括web socket握手),平均需要180ms左右;
但是并不意味着 建立1000个连接需要180*1000ms,因为建立连接过程是异步的,详见压测客户端的代码。当建立较大量连接时(一万以内),所耗费的时间与连接数基本上是线性关系。
测试中,当测试6000连接数多于2次,在不重启jvm的情况下,测试程序客户端基本上就会报buffer空间不足的异常。
2. 服务器端同时保持空闲长连接的数量/峰值;
服务器启动后,可以看到已使用内存为358M,客户端连接后为457M。它们之间的差值并不是保持所有连接 耗费的内存。因为建立连接过程中,在新生代中产生了很多垃圾内存。
标准的测试方法是:在开始连接之前,强制gc,这时看到是java进程真正占用的内存m1;在1w个连接建立之后,再次强制gc,用当前值m2减去上次gc后的内存值m1,才是保持连接实际占用的内存值,约为25M。
注意:频繁连接服务器建立1w个连接,即使全部断开,在客户端netstat –p依然可以看到这2w个端口在被占用着,未完全释放。这时就会出现异常 java.net.SocketException: No buffer space available (maximum connections reached?): connect
3. 分别在单个连接和多个连接的情况下,统计服务器端netty网络层的吞吐率。
时间表示客户端从发送第一个ping消息 开始计时,在收到最后一个pong消息后结束计时。
多连接:
连接数 |
每个连接ping次数 |
时间 |
吞吐率 |
1k |
100 |
4280ms |
23364 |
1k |
500 |
10432ms |
47929 |
1k |
1k |
18082ms |
55303 |
1k |
2k |
36261ms |
55155 |
2k |
100 |
6900ms |
28985 |
2k |
500 |
19610ms |
50994 |
2k |
1000 |
33727ms |
59299 |
3k |
100 |
9752ms |
30762 |
3k |
500 |
31461ms |
47678 |
3k |
1000 |
56176ms 122491ms |
压测无法进行(丢包,卡) |
4. 测试网络流量
客户端向服务器端发送ClientRequest,payload为LoadTest对象,序列化为json字符串,大约800+个字符。可大致认为每条请求消息字符长度为800+。
每个连接请求次数 |
时间 |
平均每秒请求数 |
IO性能(每秒字符数) |
|
1 |
1k |
566ms |
1766 |
|
1 |
5k |
1099ms |
4549 |
|
1 |
1w |
1157ms |
8643 |
|
1 |
10w |
5601ms |
17853 |
|
1k |
100 |
11094ms |
9013 |
|
100 |
25959ms |
7692 |
|
|
3k |
100 |
40062ms |
7500 |
|
|
|
|
|
|
相关推荐
在本项目中,"netty_websocket示范网页聊天项目源码" 提供了一个基于 Netty 和 WebSocket 协议实现的网页聊天应用示例。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,常用于实时通信场景,如在线聊天、...
Netty4.0全部jar包.开发时候只需要倒入总的哪一个netty4.0.jar就行了 后缀为resources.jar的全部是源码。 简单的代码例子在netty-example-resources.jar里面。
本项目"基于Netty的Java WebSocket集群框架"旨在构建一个能够支持高并发、分布式部署的WebSocket服务。下面我们将深入探讨相关的技术点和实现细节。 1. **Netty框架**:Netty的核心是它的NIO(非阻塞I/O)模型,它...
IDE:myeclips 服务器:tomcat JDK:1.7+ 说明: 直接运行 浏览器进入页面聊天 功能:把微信公众号收到的消息推送到页面(微信公众测试号需自己申请)
在现代Web开发中,实时通信已经成为一个不可或缺的功能,Spring、Netty和WebSocket的结合为构建高性能、低延迟的实时应用提供了强大的解决方案。本实例将详细探讨如何利用这三种技术进行集成,实现高效的双向通信。 ...
在本文中,我们将深入探讨如何利用Netty 4.0实现文件分片上传、断点续传以及权限校验的功能。 **文件分片上传** 文件分片上传是为了处理大文件传输时,避免一次性加载整个文件到内存中,从而减少内存消耗和提高...
Netty4.0 是其一个重要版本,引入了诸多改进和新特性。 在 Netty4.0 中,主要知识点包括: 1. **ByteBuf**:Netty4.0 引入了 ByteBuf 作为缓冲区,替代了传统的 ByteBuffer。ByteBuf 提供了更高效的内存管理,支持...
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码
在这个“netty5_兼容tcp、websocket小例子”中,我们将探讨如何利用Netty 5版本实现TCP和WebSocket的兼容,并实现信息的广播功能。TCP是一种面向连接的、可靠的传输层协议,而WebSocket则是一种在Web上提供全双工...
在本篇Netty4.0学习笔记中,我们将聚焦于如何在实际应用中混合使用`coder`和`handler`,这是Netty框架中非常关键的一部分,对于构建高性能、低延迟的网络应用程序至关重要。Netty是一个用Java编写的异步事件驱动的...
标题“rxjava_netty_websocket_client”提示我们这是一个关于使用RxJava和Netty实现WebSocket客户端的项目。RxJava是Java中的一个响应式编程库,它允许我们处理异步数据流。而Netty则是一个高性能、异步事件驱动的...
配置maven添加io.netty 在com.zhao的包下的文件,可以自行修改使用
《深入浅出Netty_netty5.0_》是针对Netty 5.0版本的一本详细教程,旨在帮助读者理解并熟练运用这一强大的网络编程框架。Netty是一个开源的Java框架,它为开发高效、稳定、可扩展的网络应用提供了全面的支持。在本文...
此外,Netty还支持WebSocket,允许双向通信,这对于实时更新保险状态或推送通知特别有用。 Netty的HTTP模块不仅提供了基础的HTTP服务,还支持自定义的编码器和解码器,这意味着你可以根据项目需求扩展其功能。例如...
NIO socket开发,netty4.0工具包。
Springboot2.0.8集成 netty4 ,使用protobuf作为ping的数据交换,比json更加的小巧,占用数据量更小,可用于任何第三方应用做心跳监控。 已完成功能: - 客户端授权验证(基于protoBuff) - 心跳检测(基于protoBuff) ...
在这个“Netty4.0 http案例”中,我们将深入探讨如何利用Netty 4.0 实现HTTP服务,以及客户端如何通过HTTP请求与服务器进行交互,特别是在处理JSON格式的数据时。 首先,让我们了解HTTP协议。HTTP(超文本传输协议...
在本文中,我们将深入探讨如何利用 Netty 和 WebSocket 实现心跳检测和断线重连机制。 首先,我们需要理解 WebSocket 协议。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它为客户端和服务器提供了低...
**SpringBoot+Netty+WebSocket+Redis:构建分布式实时聊天应用** 在当今的互联网世界中,实时通信和数据共享是许多应用程序的核心需求。Spring Boot作为一款流行的Java框架,因其简洁的配置和快速开发特性而备受...
4. **Java + Jetty/Netty**:在Java世界里,Jetty和Netty都是强大的服务器框架,它们都支持WebSocket。Jetty的WebSocket API简单易用,而Netty则提供了更底层的控制和更高的性能。 实现WebSocket通信时,你需要关注...