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