mina使用jmeter压力测试:500并发没有问题,但是500以上,机器就卡的不行,一启动,反应半天才运行,并发测试没法继续下去了。
测试mina最大连接数:
package com.blazefire.client;
import java.net.InetSocketAddress;
import java.util.Arrays;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.blazefire.bean.BaseMessage;
import com.blazefire.bean.MessageBean;
import com.blazefire.util.BeanUtil;
import com.blazefire.util.MathProtocolCodecFactory;
public class Client {
public IoConnector creatClient(){
IoConnector connector=new NioSocketConnector();
connector.setConnectTimeoutMillis(30000);
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new MathProtocolCodecFactory(false)));
connector.setHandler(new ClientHandler());
return connector;
}
public IoSession getIOSession(IoConnector connector){
ConnectFuture future = connector.connect(new InetSocketAddress("192.168.1.112", 9123));
// 等待是否连接成功,相当于是转异步执行为同步执行。
future.awaitUninterruptibly();
// 连接成功后获取会话对象。 如果没有上面的等待, 由于connect()方法是异步的, session可能会无法获取。
IoSession session = null;
try{
session = future.getSession();
}catch(Exception e){
e.printStackTrace();
}
return session;
}
public void sendMsg(IoSession session,String msg){
BaseMessage baseMessage = new BaseMessage();
MessageBean msgBean = new MessageBean();
msgBean.setMessage(msg);
baseMessage.setDataType(BeanUtil.MSG);
baseMessage.setData(msgBean);
session.write(baseMessage);
}
// public void sendByte(IoSession session,byte[] byteArray,String timeMsg){
// BaseMessage baseMessage = new BaseMessage();
// MessageBean msgBean = new MessageBean();
// msgBean.setMsgByte(byteArray);
// baseMessage.setDataType(BeanUtil.MSG);
// baseMessage.setData(msgBean);
// session.write(baseMessage);
// }
public static void main(String[] args) {
// TODO Auto-generated method stub
// Client client = new Client();
// IoConnector connector = client.creatClient();
// for(int i=0;i<20000;i++){
// IoSession session = client.getIOSession(connector);
// }
for(int i=0;i<4000;i++){
Client client = new Client();
IoConnector connector = client.creatClient();
IoSession session = client.getIOSession(connector);
client.sendMsg(session,Arrays.toString(new byte[1000])+":"+System.currentTimeMillis());
i++;
}
// Client client = new Client();
// IoConnector connector = client.creatClient();
// for(int i=0;i<16000;i++){
// IoSession session = client.getIOSession(connector);
// }
}
// Client client = new Client();
// IoConnector connector = client.creatClient();
// for(int i=0;i<10000;i++){
// IoSession session = client.getIOSession(connector);
// }
// IoSession session = client.getIOSession(connector);
// client.sendMsg( session,System.currentTimeMillis()+"");
}
只创建一次IoConnector,循环获取IoSession,
自己的程序只能运行到:16000的连接,再上去就报错。
官网的例子可以运行50000多的连接。http://mina.apache.org/report/trunk/xref/org/apache/mina/example/sumup/
然后模拟真实情况:
for(int i=0;i<4000;i++){
Client client = new Client();
IoConnector connector = client.creatClient();
IoSession session = client.getIOSession(connector);
client.sendMsg(session,Arrays.toString(new byte[1000])+":"+System.currentTimeMillis());
i++;
}
发现自己的电脑运行上面那段程序只能开启2000多个连接,再开连接就报错。原因应该是操作系统线程数有限制。
没得办法,就一台电脑开2000个连接,两台电脑运行测试:
测试计划:4000连接数 每隔一秒发送一个1K数据包 连续运行一段时间,根据日志分析接收时间
运行半个小时后,程序划分时间90%都是1000,因为线程睡眠1S,所以减去1000,基本上没有时间消耗
说明4000连接数完全没问题。
统计分析:
分享到:
相关推荐
你可以尝试添加自定义功能,如限制并发连接数、文件大小限制等。 8. **异常处理**:理解如何处理网络通信中的各种异常情况,如断线重连、错误命令响应等。 9. **性能优化**:学习如何调整Mina FTPServer的性能,...
Mina提供了一种事件驱动、非阻塞I/O的模型,这使得它在处理大量并发连接时性能优异。在Mina中,服务端通常使用Acceptor来监听连接,而客户端使用Session进行通信。 要实现Java客户端Socket与Mina服务端的通信,我们...
Java I/O 开发框架Mina,全称是Java Inbound and Outbound Network Abstraction,是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发基于TCP/IP和UDP/IP协议的应用,如TCP服务器、UDP服务器、FTP...
在传统的Socket编程中,每个连接都会创建一个新的线程进行处理,这在连接数量较少时是可行的,但当并发连接数增加时,会消耗大量系统资源,可能导致性能下降甚至服务器崩溃。 在上述的"传统socket"示例中,`...
1. **传统阻塞服务器**:每个客户端连接都需要占用一个线程,性能受限于CPU核心数。 2. **多线程阻塞服务器**:利用多线程处理多个客户端连接,但线程切换和上下文切换会带来额外开销。 3. **使用JDK自带线程池的...
首先,Openfire是基于Mina框架构建的,虽然早期与Netty有相同的设计基础,但现在Netty在性能方面已明显超越Mina。Openfire自3.4版本开始支持集群,单台服务器在特定硬件配置(如Dell R710,64GB内存,16核CPU和15000...
Openfire 是一款基于 XMPP(Extensible Messaging and Presence Protocol)协议的即时通讯(IM)服务器,它使用 MINA 库的 Java NIO 实现,通常搭配 MySQL 数据库使用。默认情况下,Openfire 官方宣称可支持约 5000 ...
2. **高性能通信**:Dubbo提供了多种通信协议,如Netty、mina、http等,以实现高并发、低延迟的远程调用。 3. **智能负载均衡**:Dubbo支持多种负载均衡策略,如随机、轮询、最少活跃调用数等,以优化服务调用性能。...
此外,Mina也是一个可选项,它同样具有优秀的性能。 2. **服务调用模式**:默认情况下,Dubbo服务调用是阻塞的,但支持异步调用,对于无返回值的操作特别适用。 3. **注册中心**:Zookeeper是Dubbo推荐的注册中心...
定期更新服务器到最新版本,以保持安全性,并根据实际情况调整服务器配置,例如限制并发连接数,以防止服务器过载。 总的来说,Apache FTPServer 1.0.6为用户提供了一个强大且灵活的FTP服务解决方案,无论你是个人...
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...