我正在使用RabbitMq 3.6.6和paho. mqttv3协议,我的简单代码如下
int max_connections =400000;
String broker = "tcp://xxx.xxx.x.xx:1883";
String clientId = "Publisher";
String content="Hii";
int qos=1;
String topic="Cluster";
MemoryPersistence persistence = new MemoryPersistence();
MqttClient sampleClient[] = new MqttClient[max_connections];
Thread t[] = new Thread[max_connections];
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
for (int i = 0; i < max_connections; i++) {
try {
sampleClient[i] = new MqttClient(broker, clientId + "" + i, persistence);
sampleClient[i].connect(connOpts);
} catch (MqttException ex) {
ex.printStackTrace();
return;
}
}
我得到了例外,比如:
线程"MQTT Con: Publisher2919"java.lang.OutOfMemoryError中的异常:无法在java.lang.Thread.start 0(本机方法)在java.lang.Thread.start(Thread.java:714)在org.eclipse.paho.client.mqttv3.interal.CommsSender.start(CommsSender.java:60)在org.eclipse.paho.client.mqttv3.interal.ClientComms$ConnectBG.run(ClientComms.java:654)在java.lang.Thread.run(Thread.java:745)
我的系统RAM是8 GB与Corei5处理器。
我也尝试在WindowsPC在相同的错误,但其高达7k连接
so any OS level Configuration in Ubuntu to make more Connection?
错误消息非常不言自明。尝试创建400,000个线程并不是一件真正现实的事情。
我假设您正在尝试加载测试您的MQTT代理,您最好看看Apache中的JMeter之类的东西,它可以在分布式模式下运行并使用多台机器来生成非常高的负载水平。