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

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

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

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

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

Параметры 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.