, в то время как это работало нормально, так как неделя я воспринимаю тайм -ауты и Outofmemororrors.
Код: Выделить всё
[16.081s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 256k, guardsize: 4k, detached.
[16.082s][warning][os,thread] Failed to start the native thread for java.lang.Thread "boundedElastic-evictor-225"
13:11:59.543 [jberet-1] ERROR org.jberet - JBERET000007: Failed to run job createTickets, createTickets, org.jberet.job.model.Step@78739007
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
at java.base/java.lang.Thread.start0(Native Method) ~[?:?]
at java.base/java.lang.Thread.start(Unknown Source) [?:?]
at java.base/java.lang.System$2.start(Unknown Source) ~[?:?]
...
Я проверил в коде, что все соединения Couchbase закрыты, когда больше не требуется - но количество потоков остается и, кажется, не уходит. Случай это Couchbase). Я проверил интерфейс администратора, но нет никаких признаков какой -либо проблемы. < /P>
Что может быть основной причиной для такого поведения? На что я должен посмотреть, чтобы узнать больше? Удаление сцепленных номеров из имен потоков, я нахожу эти подсчеты:
Обновление 2
Так много людей попросили проанализировать код. Теперь, зная, что искать, я воссоздал проблему. Вот код: < /p>
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.ClusterOptions;
import com.couchbase.client.java.codec.JacksonJsonSerializer;
import com.couchbase.client.java.env.ClusterEnvironment;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.lang.management.ManagementFactory;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class CouchbaseProblem {
private static final Logger log = LogManager.getLogger();
public static Cluster connectSimple(String connectionString, String username, String password) {
return Cluster.connect(connectionString, username, password);
}
public static Cluster connectWithEnv(String connectionString, String username, String password) {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
ClusterEnvironment environment = ClusterEnvironment.builder()
.jsonSerializer(JacksonJsonSerializer.create(mapper))
.build();
ClusterOptions co = ClusterOptions.clusterOptions(username, password);
co.environment(environment);
return Cluster.connect(connectionString, co);
}
public static int getThreadCount() {
return ManagementFactory.getThreadMXBean().getThreadCount();
}
public static void main(String[] args) throws Exception {
int max = 100;
for (int i = 0; i < max; i++) {
log.info("Simple Iteration {}/{}, Threads {}", i, max, getThreadCount());
Cluster c = connectSimple(args[0], args[1], args[2]);
Thread.sleep(Duration.of(1, ChronoUnit.SECONDS));
c.disconnect();
}
for (int i = 0; i < max; i++) {
log.info("Env Iteration {}/{}, Threads {}", i, max, getThreadCount());
Cluster c = connectWithEnv(args[0], args[1], args[2]);
Thread.sleep(Duration.of(1, ChronoUnit.SECONDS));
c.disconnect();
}
}
}
< /code>
Вы можете увидеть две петли, каждая из которых создает и закрывает соединения Couchbase. Во время запуска они регистрируют итерацию и количество потоков, о которых нужно заботиться JVM.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ng-threads
Мобильная версия