Недавно Elasticsearch 5.4 (ES) является относительно новой версией. Во время использования много проблем, которая является головной болью, но проблема была окончательно решена.
Вопрос 1: Esclient не медленно получает, и клиент не может быть получен: не удалось создать петлю для детского события
Поскольку бизнес необходимо загрузить партию файлов без загрузки индекса ES, вы должны получить соединение, а затем работать каждый раз, когда добавляете индекс. Особенно в больших партиях количество приобретений, очевидно, очень большое. Основная причина этой проблемы заключается в том, что мы часто работаем в петлях. Например, нам нужно получить 100 файлов в партии. Чтобы сократить время получения клиента ES, мы, наконец, приняли решение, то есть инициализировать соединение, когда служба запускается, получает его за один раз, а затем вызовут его непосредственно позже. После того, как весь пакетный файл загружен, индекс ES наконец добавляется вместо добавления одного файла за раз. Этот метод, очевидно, не требует каждой партии для получения соединений, что значительно повышает эффективность выполнения.
Во -первых, когда служба запускается, мы инициализируем статический клиент ES в классе запуска:
Private Static Elasticsearchutil elasticsearchutil = new Elasticsearchutil (); public static client client = elasticsearchutil.getClient ();
Затем назовите это напрямую при использовании:
Клиент клиент = main.client;
Это может значительно уменьшить количество соединений с клиентом ES, тем самым повышая эффективность.
Код ES выглядит следующим образом:
Public TransportClient getClient () {string [] iparr = configutil.getValue ("esip"). Split (","); settings settings = settings.builder (). put ("think_pool.generic.core", 5) .put ("tream_pool.max", 10) .put («Процессы», 5). .put (constants.esclustername, configutil.getValue ("clusterName")). Build (); TransportClient Client = new PrebuiltTransportClient (настройки); Для (String IP: iparr) {transportAddress address = new InetSocketCocketTransportAddress (inetAddresses.forstring (ip), 9300); client.addtransportAddresses (адрес);} return Client;}Вопрос 2: Переполнение памяти: java.lang.outofmemory: Невозможно создать новый нативный поток
В процессе разработки проекта переполнение памяти - очень хлопотная вещь. Я столкнулся с этим во время использования ES, и это было очень часто, особенно во время крупномасштабных стресс-тестов. Я думал о многих способах оптимизации памяти JVM, но никакого эффекта не было, и проблема все еще не была решена. Наконец, когда я посмотрел на исходный код, я нашел причину. В сочетании со исключениями по ошибкам, это связано с тем, что большое количество потоков было автоматически создано во время использования с ES, что превышало емкость системы, что привело к переполнению памяти. При изучении исходного кода я обнаружил, что количество потоков, созданных ES, можно контролировать с помощью настройки. Вот номер по умолчанию потоков ES создания:
thread_pool.generic.core = значение по умолчанию --- 4thread_pool.generic.max = значение по умолчанию-мимин (512, макс (4*Номер процессора, 128)) Номер процессора = номер процессора процессора.
Наш процессор - 10 ядер и 40 потоков
Судя по результатам расчета, если используется значение по умолчанию, количество потоков, которые могут создать ES, является большим значением, которое далеко за пределами емкости самой системы. В основном он настраивает значение настройки. После корректировки мы изменяем значение ES по умолчанию следующим образом:
Настройки настройки = настройки.builder (). Put ("thread_pool.generic.core", 5) .put ("thread_pool.generic.max", 10) .put ("Процессоры", 5) .put (constants.esclusername, configutil.getvalue ("clusername").). Это предыдущие настройки настройки = настройки.builder (). Put ("thread_pool.generic.core", 5) .put (constants.esclustername, configutil.getvalue ("clustername")). Build ();После тестирования ES создал очень небольшое количество потоков и удовлетворяет наши потребности в разработке, и снова не было проблемы переполнения памяти.
Приведенное выше резюме общих вопросов, основанных на Elasticsearch 5.4, - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.