SetRetail10 ◾️ Конфигурация и масштабирование системных настроек SetCentrum/SetRetail после установки

Публичное пространство

SetRetail10 ◾️ Конфигурация и масштабирование системных настроек SetCentrum/SetRetail после установки

Производить настройки рекомендуется опытными пользователями или системными администраторами.

Базовая конфигурация сервера Set10 и Postgres после установки

Настройте сервер Set10 и СУБД Postgres согласно сайзингу:

  1. SetRetail10 ◾️ Минимальные системные требования к серверу магазина

  2. Основные рекомендации по конфигурации сервера WildFly и PostgreSQL. Сайзинг

  3. Подробное описание конфигурации внутренних системных настроек сервера СУБД PostgreSQL

Если после настройки наблюдаются проблемы, необходимо выполнить диагностику по данной статье.

Как определить необходимость повышения лимитов памяти для Wildfly

Общие симптомы

  • GUI сервера Set10 по порту 8090 отвечает нестабильно.

  • Транспортный сервлет по адресу в веб-браузере http://ip_адрес_сервера:8090/SetXRMI/TransportServlet отвечает нестабильно.

  • В логе server.log есть ошибки вида:

    • Java Heap Space;

    • Could not open connection;

    • Unable to get managed connection;

    • No managed connections available;

    • Could not invoke service method;

    • Network error в браузере.

Определение потребления памяти Wildfly на Linux

  1. Подключитесь к веб-консоли Wildfly по адресу http://IP_адрес_сервера_Set10:9990/

    1. Логин и пароль необходимо уточнить в техподдержке CSI

  2. Перейдите по адресу RuntimeServerStatus

  3. На экране Status видно реальное потребление выделенной Heap-памяти и Non-Heap. На данном примере сервер потребляет 1068 MB из 1984 MB выделено всего на Heap-память и 410 MB из 2280 MB всего на Non-Heap память. Итого сервер использует фактически 1068 + 410 = 1478 MB места в памяти.

    image-20250204-171746.png
  4. Если значение Used для Heap и Non-Heap близко к максимальному, значит, почти вся возможная выделенная память для работы приложения занята и может понадобиться увеличение значений -Xms и -Xmx в /var/lib/jboss/bin/standalone.conf (Linux) или %SET10_HOME%\bin\standalone.conf.bat (Windows).

    1. Параметр для настройки выделения памяти серверу Wildfly JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx2048M -XX:MaxMetaspaceSize=1024m"

  5. Для определения, сколько памяти можно выделить дополнительно для сервера Wildfly, необходимо вычислить доступное место в памяти в операционной системе. Для этого подключитесь к серверу по SSH с помощью клиента PuTTy или SetConsole.

  6. Проверьте общее потребление процессом сервера Wildfly в системе (вывод в килобайтах):

ps aux | fgrep '[Standalone]' | grep -v grep | awk '{print $6}'

В данном случае это 2,02 ГБ:

image-20250204-172954.png
  1. Для проверки общего количества RAM на сервере и её занятость запустите инструмент htop и нажмите M для сортировки по памяти:

    image-20250204-173847.png

10. Дополнительно проверьте RAM с помощью команды free -m.

Идеальное значение - SWAP должен быть свободен.

  • total - общий объём памяти;

  • used - занятый объём;

  • free - свободное место в памяти.

image-20250204-174002.png

Выводы

  • Сравните значение реального потребление Heap-памяти сервера Wildfly c максимально выделенным в параметре -Xms и -Xmx в standalone.conf

    • Если значение близко к максимальному, может потребоваться увеличение лимита потребляемой памяти в /var/lib/jboss/bin/standalone.conf

  • Сравните доступное количество оперативной памяти в операционной системе и необходимой для сервера Wildfly.

    • Если свободного места в памяти недостаточно для максимального значения параметра -Xmx, рекомендуется добавление RAM на сервер.

  • Если сервер Postgres установлен на данном сервере, необходимо всегда держать 1/4 оперативной памяти свободной для обеспечения работы СУБД.

Если свободного места в памяти нет, рекомендуется проверить, чем оно занято кроме процесса Wildfly:

  • Проверить через утилиты htop или top.

  • Отсортировать процессы по потреблению памяти, значение в мегабайтах ps aux | sort -n -k 6.

Определение потребления памяти Wildfly в ОС Windows

  1. Подключение к веб-консоли сервера Wildfly аналогично как в Linux по адресу http://IP_адрес_сервера_Set10:9990/

  2. Проверьте общее потребление процессом Wildfly в системе (вывод в килобайтах). Максимальное значение, это и есть Wildfly:

tasklist | findstr java.exe

Выводы

  • Сравните значение реального потребление Heap-памяти сервера Wildfly c максимально выделенным в параметре -Xms и -Xmx в standalone.conf.bat

    • Если значение близко к максимальному, может потребоваться увеличение лимита потребляемой памяти в {DISK}:\ПАПКА_УСТАНОВКИ_SETRETAIL\bin\standalone.conf.bat

  • Сравните доступное количество оперативной памяти в операционной системе и необходимой для сервера Wildfly.

    • Если свободного места в памяти недостаточно для максимального значения параметра -Xmx, рекомендуется добавление RAM на сервер.

  • Если сервер Postgres установлен на данном сервере, необходимо всегда дополнительно обеспечить 1/4 оперативной памяти свободной для обеспечения работы СУБД.

Если свободного места в памяти нет, рекомендуется проверить, чем оно занято кроме процесса Wildfly:

  • Диспетчер задач Windows

    • Вкладка Подробности;

    • Вкладка Производительность - внизу окна ссылка Открыть монитор ресурсов → вкладка Память.

Оптимизация настроек памяти для Wildfly

Основная документация

Подробное описание настроек запуска и работы службы WildFly

Куда обращать внимание

  • Windows: {DISK}\Папка_установки_SetRetail10\bin\standalone.conf.bat;

  • Linux: /var/lib/jboss/bin/standalone.conf.

Пример оптимизации

  1. В файле standalone.conf найдите строку JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx2048M -XX:MaxMetaspaceSize=1024m"

  2. Установите значение параметра Xms/Xmx согласно сайзингу SetRetail10 ◾️ Минимальные системные требования к серверу магазина

В данном случае для Heap Java (Xms/Xmx) выделено 2ГБ + 1ГБ (MaxMetaspaceSize). Итого: 3 ГБ.

image-20250204-175227.png

Предельный общий размер памяти, занимаемый Wildfly, может быть больше установленных ограничений примерно на 1/4, так как в JVM есть другие модули, которые потребляют память, но не требуют прописанных ограничений (сборщик мусора, кэши и т.д.)

Рекомендуемый размер выделяемой памяти для Wildfly (Xms/Xmx) не более 2/3 от имеющейся RAM, без учёта SWAP, и при условии, что сервер PostgreSQL и дополнительные модули (SetKit, SetAgent) установлены на отдельном сервере.

Рассчитывать объём памяти нужно исходя из фактически свободного места в RAM при запуске всех установленных сервисов.

Баланс коннектов от Wildfly к PostgresSQL

Основная документация

Основные рекомендации по конфигурации сервера WildFly и PostgreSQL. Сайзинг

Оптимизация коннектов к базе данных на SetCentrum

Куда обращать внимание

  • Windows: {DISK}\Папка_установки_SetRetail10\standalone\configuration\standalone.xml.

  • Linux: /var/lib/jboss/standalone/configuration/standalone.xml.

  • PostgresSQL:

    • Windows: {DISK}\Папка_установки_PostgreSQL\15\data\postgresql.conf.

    • Linux:

      • /etc/postgresql/15/main/postgresql.conf.

      • Команда для поиска ps fax | grep postgresql | grep -v grep.

Последовательность шагов

1. Параметр <max-pool-size>...</max-pool-size> в standalone.xml

  • Основная нагрузка по коннектам идёт на базу данных set, для неё нужно выделить ~3/4 от общего пула коннектов, остальные распределить к базам данных set_operday и set_loyal.

  • Рекомендуемое количество коннектов можно определить, опираясь на сайзинг из официальной документации PostgreSQL или Wildfly согласно топологии.

Пример настроенных коннектов на высоконагруженном сервере (более 10-ти тысяч касс на одном сервере SetCentrum):

set → <max-pool-size>4000</max-pool-size>:

 

set_loyal → <max-pool-size>150</max-pool-size>:

 

set_operday → <max-pool-size>400</max-pool-size>:

2. Параметр http max-connections в standalone.xml

  1. Проверьте текущее потребление коннектов к Wilfdly, можно командой:

  • Windows: netstat -n | find /c /i ":8090"

  • Linux: netstat -n -p | grep :8090 | wc -l

  1. Например, при значении для баз данных в параметре <max-pool-size>...</max-pool-size> (set = 2000) + (set_loyal = 150) + (set_operday = 400) установите значение 2295 (минус 10%). В этом случае понизьте значение на 10-20% ниже общей суммы коннектов max-pool-size.

3. Параметр max_connections в postgresql.conf

Значение должно быть равно общему пулу коннектов max-pool-size + 20 (на служебные коннекты).

В данном примере, это значение (set = 2000) + (set_loyal = 150) + (set_operday = 400) +20 = 2570.

4. Параметр max_prepared_transactions в postgresql.conf

Повысьте 90% до 100% от значения max_connections в postgresql.conf.

5. Параметр effective_cache_size в postgresql.conf

Размер кэша, хранимого на диске, установить не менее 8000MB.

5. Параметр maintenance_work_mem в postgresql.conf

Должен быть не меньше 64MB. Допускаются значения: 1GB или 2GB.

Полная оптимизация настроек Postgres

Основная документация

Подробное описание конфигурации внутренних системных настроек сервера СУБД PostgreSQL

Описание параметров

Подробное описание сайзинга под разные торговые сети смотрите в основной статье, указанной выше.

  • max_connection - общий пул коннектов, которые может принять СУБД, включая запросы от Wildfly, Zabbix, живых пользователей, например, через pgAdmin или другие источники.

  • shared_buffers - рекомендуется установить 25-30% от свободной оперативной памяти (например, при 16GB всего, нормальное значение этого параметра 4GB).

  • work_mem - рекомендуемые значения 16MB - 48MB для высоконагруженных серверов. Учитывать, что каждый коннект из пула max_connection занимает значение work_mem, то есть 2000 коннектов по 16MB при одновременном использовании занимают 32GB RAM (должен быть запас в RAM по максимальному значению).

Настройка лимитов в Linux (Centos, Ubuntu)

Для ОС Windows дополнительные настройки лимитов не требуются.

Пример в документации

https://crystals.atlassian.net/wiki/spaces/SR10SUPPORT/pages/1163984910#SetAgent◾️Установкаинастройка-SetAgent%E2%97%BE%EF%B8%8F%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%D0%B8%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%D0%BB%D0%B8%D0%BC%D0%B8%D1%82

На что обратить внимание

  • лимиты открытых приложением файловых дескрипторов;

  • лимиты системных файловых дескрипторов;

  • лимиты количества запущенных процессов.

Что проверить?

Системные лимиты количества процессов для Wildfly

Проверки для повышения лимита

  1. Проверьте текущие системные лимиты для процесса jboss (настройка max user processes по умолчанию 4096):

su -c "ulimit -a" jboss | grep 'max user processes'
  1. Проверить текущее количество открытых процессов (для Wildfly)

Если полученное значение подходит близко к max user processes, тогда увеличьте его до рекомендуемого 16384.

  • su jboss

  • ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

  1. Выполните команду sudo mcedit /etc/security/limits.conf → добавьте строку ниже после # End of file → сделайте клавишей ENTER новую строку после добавленной → перезапустите службу сервера приложений (sudo service JBOSS_SVC restart)

jboss - nproc 50000
image-20250221-172144.png

Проверка существующих ограничений максимального количества открытых файлов

  1. Выполните команду для процессов Java (команда требует повышение привилегий через sudo или root):

  • sudo su

  • for pid in `pidof java`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

  1. Проверьте разницу между значениями Max open files и Currently open files:

Например: Max open files = 4096, Currently open files = 3875.

Если пределы по одному из процессов подходят к лимиту, тогда настройте их.

  1. Откройте Midnight Commander командой sudo mc → откройте на редактирование файл в зависимости от названия продукта /etc/systemd/system/название_продукта.service.

image-20250221-173001.png
  1. В блок [Service] добавьте параметр LimitNOFILE=32768 (пример конфигурационного файла МУК SCM_SVC):

image-20250221-172904.png
  1. Перезапустите службу продукта:

sudo systemctl daemon-reload sudo systemctl restart название_сервиса
image-20250221-173142.png

 

© 1994-2025, ООО «Кристалл Сервис Интеграция».
Все права защищены..

Политика обработки персональных данных