`
huaye2007
  • 浏览: 37151 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

MINA 并发数 性能测

阅读更多

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连接数完全没问题。

统计分析:

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    JAVA上百实例源码以及开源项目

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    java开源包1

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包11

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包2

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包3

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包6

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包5

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包10

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包4

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包8

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包7

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包9

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包101

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    Java资源包01

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

Global site tag (gtag.js) - Google Analytics