# Создаётся очень много java потоков при использовании CreateIndex API

**URL:** <https://discuss.elastic.co/t/java-createindex-api/266773>\
**Category:** Вопросы на русском языке\
**Created:** [March 10, 2021, 8:12am UTC](https://discuss.elastic.co/t/java-createindex-api/266773 "2021-03-10T08:12:11Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![nikita\_zubrinovich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nikita_zubrinovich/32/78148_2.png) [@nikita\_zubrinovich](https://discuss.elastic.co/u/nikita_zubrinovich)\
**Post date:** [March 10, 2021, 8:12am UTC](https://discuss.elastic.co/t/java-createindex-api/266773/1 "2021-03-10T08:12:12Z")

</div>

В своём приложении мне необходимо создать новый индекс, для этого я использую High Level REST Client и CreateIndexRequest. Вот код, который я использую

```auto
public boolean createNewIndex(String indexName, Map<String, Object> initialIndexSettings) {
        boolean indexCreated = false;
        CreateIndexRequest request = new CreateIndexRequest(indexName);
        request.settings(initialIndexSettings);
        try {
            CreateIndexResponse createIndexResponse = this.elasticsearchConfiguration.client().indices().create(request, RequestOptions.DEFAULT);
            this.elasticsearchConfiguration.client().close();
            indexCreated = (createIndexResponse.isAcknowledged() && createIndexResponse.isShardsAcknowledged());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return indexCreated;
    }

```

В Map\<String, Object\> initialSetting задаётся только количество шард = 3 и период обновления индекса = -1. И после выполнения данного метода количество java потоков увеличивается на 300+. Подскажите пожалуйста в чём может быть проблема. Версия elasticsearch клиента 7.5.2, версия кластера 7.9.1. Может ли это быть из-за разности версий?  
Вот количество потоков до выполнения метода:

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/4/0/40603bc857c8804ed4a871d17429812df457f9e7.png)  
вот после:  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/8/1/8120b1d0b1b23e4c63533af86315efc0ec087d69.png)  
Мониторинг количества потоков осуществлялся через jconsole  
Сам клиент создаётся вот так:

```auto
return new RestHighLevelClient(RestClient.builder(
                new HttpHost(host, port, "http")
        ));

```

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 10, 2021, 3:38pm UTC](https://discuss.elastic.co/t/java-createindex-api/266773/2 "2021-03-10T15:38:53Z")

</div>

> [@nikita\_zubrinovich](#):
>
> `this.elasticsearchConfiguration.client()`

То есть каждый вызов этого метода создает новый набор HttpPost, RestClient и RestHighLevelClient? В createNewIndex два таких вызова и только один из них ведет к закрытию клиента?

---

<div class="post-metadata">

**Author:** ![nikita\_zubrinovich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nikita_zubrinovich/32/78148_2.png) [@nikita\_zubrinovich](https://discuss.elastic.co/u/nikita_zubrinovich)\
**Post date:** [March 11, 2021, 8:54am UTC](https://discuss.elastic.co/t/java-createindex-api/266773/3 "2021-03-11T08:54:00Z")

</div>

Получается, что так. Я исправил эту ошибку, теперь клиент создаётся только 1 рази закрывается, но тенденция с увеличением количества потоков не изменилась, увеличивается примерно на столько же

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 15, 2021, 2:21pm UTC](https://discuss.elastic.co/t/java-createindex-api/266773/4 "2021-03-15T14:21:37Z")

</div>

А зачем вы его каждый раз создаете и закрываете? Как потоки называются?

---

<div class="post-metadata">

**Author:** ![nikita\_zubrinovich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nikita_zubrinovich/32/78148_2.png) [@nikita\_zubrinovich](https://discuss.elastic.co/u/nikita_zubrinovich)\
**Post date:** [March 18, 2021, 12:10pm UTC](https://discuss.elastic.co/t/java-createindex-api/266773/5 "2021-03-18T12:10:05Z")

</div>

Мы больше не создаём его каждый раз, это была ошибка, сейчас клиент создаётся только 1 раз и мы его используем. А потоки называются I/O dispatcher №, вот более подробно про них:

```auto
Name: I/O dispatcher 81
State: RUNNABLE
Total blocked: 0 Total waited: 0

Stack trace: 
sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
   - locked sun.nio.ch.Util$3@2d73fee5
   - locked java.util.Collections$UnmodifiableSet@5f662c1a
   - locked sun.nio.ch.WindowsSelectorImpl@2a83ac60
sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:255)
org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
java.lang.Thread.run(Thread.java:748)

```

Может ли количество шрад и реплик на индекс послужить причиной тому, что получается такое количество потоков? В нашем коде мы много раз отправляем запросы на индекс, забираем данные, а потом, когда все данные собрали и обновили их в другом индексе отправляем агрегирующий запрос. Т.е. количество запросов за один проход может быть очень большим. И каждый индекс у нас состоит из 3 шардов и 2 реплик на каждую шарду. Может ли это влиять на количество потоков? Т.к. если индекс распараллелен на несколько шард, то когда мы отправляем search запрос он работает с каждой шардой этого индекса и получается, когда мы пытаемся обновить данные в индексе по какому-то критерию эластик ищет эти данные для обновления в каждой шарде и не плодит ли он всеми этими действиями большое количество потоков?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 22, 2021, 3:11pm UTC](https://discuss.elastic.co/t/java-createindex-api/266773/6 "2021-03-22T15:11:43Z")

</div>

> [@nikita\_zubrinovich](#):
>
> Может ли количество шрад и реплик на индекс послужить причиной тому, что получается такое количество потоков?

Нет. Разбиение запроса на шардовые подзапросы происходит на сервере, а не на клиенте.

> [@nikita\_zubrinovich](#):
>
> потоки называются I/O dispatcher

Это потоки из apache httpcore, которые RestClient использует. Они держаться в пуле.

> [@nikita\_zubrinovich](#):
>
> Может ли это быть из-за разности версий?

Не должно быть. Был баг, который создавал проблемы до 4.5.0, но в 4.5.2 он уже был исправлен. А как поиск выполняется? Вы там, случайно, нового клиента не создаете?

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [April 19, 2021, 3:12pm UTC](https://discuss.elastic.co/t/java-createindex-api/266773/7 "2021-04-19T15:12:16Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
