Использование памяти

С точки зрения операционной системы, лежащей в основе, SberMobile Server, как любое другое программное обеспечение на базе Java, потребляет столько памяти, сколько есть в его распоряжении. Никак не больше и редко меньше. Максимально разрешенное количество определяется настройкой -Xmx, заданной в файле свойств запуска.

В большинстве случаев, инсталлятор SberMobile устанавливает это значение на 50% оперативной памяти, доступной на машине, где запущен SberMobile. Таким образом, если системный администратор проверит использование памяти сервера при помощи Windows Task Manager или  Linux команды top, он, скорее всего, заметит, что объем занимаемой SberMobile Serverом памяти довольно высок.

Однако это не имеет ничего общего с реальным использованием памяти! Виртуальная машина Java (JVM), запускающая SberMobile Server, имеет собственную систему управления динамической памятью. Система довольно сложная, но если коротко, у нее есть периодический процесс под названием Сбор Мусора. Этот процесс очищает все временные файлы в памяти, позволяя видеть, сколько на самом деле памяти используется сервером в долгосрочной перспективе.

Единственный способ узнать объем реально потребляемой памяти сервера - это проделать последовательность двух операций:

Проверка параметра Использование памяти, % от максимально допустимого без предварительного запуска очистки памяти ("сбора мусора") покажет случайные значения в диапазоне от фактического использования памяти до 100%. Этот результат не пригоден для какой-либо интерпретации.

Если объем фактически используемой памяти сервера (сразу после цикла очистки) превышает 90%, Виртуальная машина Java сервера испытывает недостаток памяти, тратя больше времени на процесс сбора мусора и увеличивая нагрузку на ЦП.

Если JVM не может очистить достаточно памяти для продолжения нормальной работы сервера, она будет потреблять вплоть до 100% ЦП для процесса сбора мусора, даже до того, как зарегистрирует первую ошибку о нехватке памяти!

Таким образом, если фактическое использование памяти превышает 90% разрешенного максимума,  значение -Xmx должно быть увеличено для эффективной работы сервера. Если новое значение -Xmx выше 70-80% размера доступной оперативной памяти, оперативную память сервера нужно расширить для обеспечения достаточного количества памяти для SberMobile Server, операционной системы и стороннего ПО.

И, наоборот, если фактическое потребление памяти довольно низкое, а сервер уже запущен в рабочем режиме, значение параметра -Xmx можно снизить для освобождения большего количества памяти (например, для базы данных сервера или других приложений). Например, если использование памяти равно 30%, значение -Xmx можно разделить на два, а самое низкое использование памяти поднимется до 60%-Xmx, что является достаточно безопасным.

Подконтекстное использование памяти

Возможно также анализировать примерный размер динамической памяти JVM, удерживаемой каждым отдельным контекстом.

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