Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-28660

memory leak of mongodb database with SSL support

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical - P2
    • Resolution: Duplicate
    • Affects Version/s: 3.4.2
    • Fix Version/s: None
    • Component/s: Security
    • Labels:
      None
    • Environment:
      The client is a Java program. Server: operating system: Ubuntu 16, CPU: 4 core 3.4GHZ, RAM:8GB, database: Mongodb 3.4 Community version

      Description

      We have Mongodb database server runs with SSL support, the config file about SSL is below, The certificate is self sign created with OpenSSL,
      /etc/mongod.conf

      net:
        port: 27017
      #  bindIp: 127.0.0.1
        ssl:
          mode: requireSSL
          PEMKeyFile: /home/puma/atlas-ssl.pem
      

      The clients is a Java multi thread program, write a record into Mongodb database every minute,

      import java.util.Date;
      import java.util.concurrent.ExecutorService;
      import java.util.concurrent.Executors;
       
      import org.bson.Document;
       
      import com.mongodb.MongoClient;
      import com.mongodb.MongoClientURI;
      import com.mongodb.client.MongoCollection;
      import com.mongodb.client.MongoDatabase;
       
      public class PressureTest {
      	public static void main(String[] args) {
      		ExecutorService executor = Executors.newFixedThreadPool(100);
      		for (int i = 0; i < 100; i++) {
      			Runnable worker = new WorkerThread();
      			executor.execute(worker);
      		}
      	}
      }
       
      class WorkerThread implements Runnable {
       
      	@Override
      	public void run() {
      		System.setProperty("javax.net.ssl.trustStore",
      				"C:/ssl/atlas-truststore.ts");
      		System.setProperty("javax.net.ssl.trustStorePassword", "password");
      		while (true) {
      			insert();
      			hangup();
      		}
      	}
       
      	private void hangup() {
      		try {
      			Thread.sleep(60000);
      		} catch (InterruptedException e) {
      			e.printStackTrace();
      		}
      	}
       
      	private void insert() {
      		MongoClient client = null;
      		try {
      			if (client == null) {
      				client = new MongoClient(new MongoClientURI(
      						"mongodb://192.168.244.193:27017/atlas?ssl=true&sslInvalidHostNameAllowed=true"));
      			}
      			MongoDatabase db = client.getDatabase("atlas");
      			MongoCollection<Document> collection = db.getCollection("operating_data");
      				document.put("serialNumber", Thread.currentThread().getName());
      			document.put("timestamp", new Date());
      			document.put("FWver", "01.00.00");
      			document.put("HWver", "03");
      			document.put("harmonizerModel", "String");
      			document.put("bypassTap1", "00.0");
      			document.put("lowTap", "00.00");
      			document.put("medTap", "00.00");
      			document.put("highTap", "00.00");
      			document.put("id", 0);
      			document.put("msg", "Message string");
      			collection.insertOne(document);
      		} catch (Exception e) {
      		} finally {
      			if (client != null) {
      				client.close();
      			}
      		}
      	}
      }
      

      The issue is that the memory usage of Mongodb server keeps going up until the server throw out of memory error and mongodb service is collapsed.
      Do you guys have any suggestion for this issue? I appreciate your help so much!

      John

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                6 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: