Утечка памяти при Mon go Java Соединение с POJO вызывает OOM - PullRequest
0 голосов
/ 04 мая 2020
String dbURI = "mongodb://mongoji:pass@XXXX:27017,xxxx:27017,xxxx:27017/admin?replicaSet=rs0";
    MongoClient mongoClient = new MongoClient(new MongoClientURI(dbURI));
    DB db = mongoClient.getDB("test");
    DBCollection collection = db.getCollection("read");
BasicDBObject data = new BasicDBObject();
    data.append("DT", now.getTime());
collection.insert(data);
DBCollection collection2 = db.getCollection("sent");
BasicDBObject searchQuery = new BasicDBObject();
List<BasicDBObject> list = new ArrayList<BasicDBObject>();
list.add(new BasicDBObject("email", email));
list.add(new BasicDBObject("email2", email));// multiple

searchQuery.put("$and", list);
BasicDBObject newDocument = new BasicDBObject();
newDocument.append("$set", new BasicDBObject().append("Yes", "Y")); 
collection2.updateMulti(searchQuery, newDocument);

В течение нескольких транзакций в l oop я вижу, что некоторое количество памяти переполняется приложением, которое не освобождается, и через некоторое время мой сервер останавливается и выдает "bash fork Не удается выделить память" ошибка, которую я пытался ulimit

* soft nofile 65535
  * hard nofile 65535

, но ничего не происходит, также получаю ошибку ниже

java .lang.OutOfMemoryError: невозможно создать новый собственный поток на java .lang.Thread.start0 (собственный метод) в java .lang.Thread.start (Thread. java: 714) в java .util.concurrent.ThreadPoolExecutor.addWorker (ThreadPoolExecutor. java: 950 ) в java .util.concurrent.ThreadPoolExecutor.ensurePrestart (ThreadPoolExecutor. java: 1587) в java .util.concurrent.ScheduledThreadPoolExecutor.delayedExecute (ScheduledThreadPoolExecutor. java 334. 334): 334 concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate (ScheduledThreadPoolExecutor. java: 573) в java .util.concurrent.Executors $ DelegatedScheduledExecutorService.scheduleAtFixedRate (Executors. * 1 026 *: 735) по адресу com.mongodb.connection.DefaultConnectionPool.createTimer (DefaultConnectionPool. java: 316) по адресу com.mongodb.connection.DefaultConnectionPool. (DefaultConnectionPool. java: 75) по адресу com.mongodbefactSact .create (DefaultClusterableServerFactory. java: 60) в com.mongodb.connection.BaseCluster.createServer (BaseCluster. java: 351) в com.mongodb.connection.MultiServerCluster.addServer (MultiServerCluster: 29Server * 29). com.mongodb.connection.MultiServerCluster. java: 208) на com.mongodb.connection.MultiServerCluster.onChange (MultiServerCluster. java: 158) на com.mongodb.connection.MultiServerCluster.access $ 100 (MultiServerCluster. java: 44) на com.mongodb. connection.MultiServerCluster $ DefaultServerStateListener.stateChanged (Multi ServerCluster. java: 121) в com.mongodb.connection.DefaultServer $ DefaultServerStateListener.stateChanged (DefaultServer. java: 186) в com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable.sendStateCerg: 1039. в com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable.run (DefaultServerMonitor. java: 164) в java .lang.Thread.run (поток. java: 745)

...