MongoDB CPU使用率达到100%

时间:2018-10-03 07:50:11

标签: mongodb scala morphia

我们大约有100个IoT设备连接到云,并每10秒将数据发送到云。

我们在2vcore / 4G RAM和8vcore / 16G RAM上进行了测试。在短时间内,CPU使用率分别增加到200%和800%。建立的TCP连接大约为106。

是因为我们创建了太多的mongoldb连接,还是因为写入mongoDB的频率太快了?

我认为Scala中的对象就像单例,因此它应该只创建一个DBHelper对象?但是DBHelper中的代码是否为每个TCP连接创建每个数据存储区?

1.DBHelper.scala:

  Object DBHelper{
      var datastore= morphia.createDataStore(…………….);
  }

2.MqttClient.java

  mqttPushClient.setCallback(pushCallBack);

3。

 public class PushCallback implements MqttCallback {
      public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
       //calls DBHelper and save message to mongoDB
   }
 }

1 个答案:

答案 0 :(得分:0)

您应该只创建一个MongoClient并尽可能地重复使用。 MongoClient有自己的内部连接池,因此可以为您管理所有连接。每次创建新客户端时,它都必须重新建立连接并加载元数据的某些位。因此,请尽可能创建一个客户端和一个Datastore来建立该连接,并尽可能多地重用它。