Производительность системы

Подход к производительности

Продукты Юниверс не имеют специальной оптимизации производительности под ту или иную серверную конфигурацию. Также не выделено отдельных параметров системы, напрямую влияющих на производительность.

По умолчанию для любой конфигурации продукты Юниверс запускаются и работают. Меры по оптимизации производительности рекомендуется предпринимать только если проявляются явные проблемы. При борьбе с проблемами необходимо использовать индивидуальный подход, учитывая особенности конкретного сервера, состава данных, ожидаемых показателей и т.д.

Параметры производительности

Параметры Java Virtual Machine (или Libercat Virtual Machine), которые используются, и которые влияют на производительность:

  • -XX:+UseStringDeduplication - одинаковые строки не плодят в памяти новых объектов. Категория "Экономия памяти".

  • -XX:+AlwaysPreTouch - не отдавать операционной системе однажды использованные страницы памяти, держа их в резерве. Категория "быстродействие".

  • -XX:MaxGCPauseMillis =150 - целевое время паузы коллектора. Стандартное время 200 миллисекунд. Если необходимо проходить тесты производительности и стремиться к 99 перцентилю, то значение нужно понижать (уменьшится задержка). Для повышения реальной пропускной способности нужно выделять больше памяти (-Xmx) и увеличенное время. Категория "быстродействие".

  • -XX:+HeapDumpOnOutOfMemoryError, -Xlog:gc*:file=/var/log/apache-tomcat-9.0.65/unidata-gc.log - лог для поверхностного наблюдения за деятельностью коллектора и инструктируем машину создавать heap dump при проблемах Out Of Memory.

  • -Xms == -Xmx - выделение памяти. Если оба параметра одинаковы, это может улучшить производительность за счет того, что производится меньше действий с выделением памяти (индивидуально в каждом случае). Настраивается опытным путем.

В разных модулях системы:

  • *.shards.number - количество первичных шард поисковых индексов. Опытным путем подбирается баланс под кластер.

  • *.replicas.number - количество реплик шард поисковых индексов. Чем выше число, тем медленнее вставка, но при этом выше и устойчивость кластера.

В модулях операций:

  • *.threads (например, org.unidata.mdm.job.reindex.data.reindex.threads) - количество потоков на узле, доступное для операции. Зависит от количества процессоров сервера.

  • *.commit.interval (например, org.unidata.mdm.job.reindex.data.commit.interval) - количество айтемов для обработки операцией за один проход по курсору одним потоком. Для реиндекс операции "чем выше тем быстрее", но нужен баланс, чтобы не получить ошибку Out Of Memory.