Использование памяти
С точки зрения операционной системы, лежащей в основе, SberMobile Server, как любое другое программное обеспечение на базе Java, потребляет столько памяти, сколько есть в его распоряжении. Никак не больше и редко меньше. Максимально разрешенное количество определяется настройкой -Xmx
, заданной в файле свойств запуска.
В большинстве случаев, инсталлятор SberMobile устанавливает это значение на 50% оперативной памяти, доступной на машине, где запущен SberMobile. Таким образом, если системный администратор проверит использование памяти сервера при помощи Windows Task Manager или Linux команды top
, он, скорее всего, заметит, что объем занимаемой SberMobile Serverом памяти довольно высок.
Однако это не имеет ничего общего с реальным использованием памяти! Виртуальная машина Java (JVM), запускающая SberMobile Server, имеет собственную систему управления динамической памятью. Система довольно сложная, но если коротко, у нее есть периодический процесс под названием Сбор Мусора. Этот процесс очищает все временные файлы в памяти, позволяя видеть, сколько на самом деле памяти используется сервером в долгосрочной перспективе.
Единственный способ узнать объем реально потребляемой памяти сервера - это проделать последовательность двух операций:
Выполнить действие Запустить очистку памяти из Корневого контекста, чтобы запустить полный цикл "сбора мусора" JVM
Проверить значение поля Использование памяти, % от максимально допустимого в переменной Статус сервера Корневого контекста, например, выполнив действие Просмотреть информацию о сервере из Корневого контекста
Проверка параметра Использование памяти, % от максимально допустимого без предварительного запуска очистки памяти ("сбора мусора") покажет случайные значения в диапазоне от фактического использования памяти до 100%. Этот результат не пригоден для какой-либо интерпретации. |
Если объем фактически используемой памяти сервера (сразу после цикла очистки) превышает 90%, Виртуальная машина Java сервера испытывает недостаток памяти, тратя больше времени на процесс сбора мусора и увеличивая нагрузку на ЦП.
Если JVM не может очистить достаточно памяти для продолжения нормальной работы сервера, она будет потреблять вплоть до 100% ЦП для процесса сбора мусора, даже до того, как зарегистрирует первую ошибку о нехватке памяти!
Таким образом, если фактическое использование памяти превышает 90% разрешенного максимума, значение -Xmx
должно быть увеличено для эффективной работы сервера. Если новое значение -Xmx
выше 70-80% размера доступной оперативной памяти, оперативную память сервера нужно расширить для обеспечения достаточного количества памяти для SberMobile Server, операционной системы и стороннего ПО.
И, наоборот, если фактическое потребление памяти довольно низкое, а сервер уже запущен в рабочем режиме, значение параметра -Xmx
можно снизить для освобождения большего количества памяти (например, для базы данных сервера или других приложений). Например, если использование памяти равно 30%, значение -Xmx
можно разделить на два, а самое низкое использование памяти поднимется до 60%-Xmx
, что является достаточно безопасным.
Подконтекстное использование памяти
Возможно также анализировать примерный размер динамической памяти JVM, удерживаемой каждым отдельным контекстом.
Подконтекстное использование памяти отображается в колонке Удерживаемая память таблицы статистики. Получить доступ к ней можно через действие Показать статистику контекстов корневого контекста.