В конкретном случае Tomcat (, как и в этом вопросе ), я обнаружил, что проще поместить большинство этих настроек в bin/setenv.sh
, который выполняется Tomcat при запуске и оценивает переменные в сценарий оболочки, как и ожидалось.
Итак, в /etc/systemd/system/tomcat.service
я указываю переменные Environment
только для CATALINA_BASE
и CATALINA_HOME
, а затем помещаю все остальное в ${CATALINA_BASE}/bin/setenv.sh
.
Это нормальное поведение. Любая неиспользуемая память будет использоваться для кеша, чтобы улучшить общую производительность. Эта память будет автоматически освобождена, если она понадобится для чего-то другого. Вам не нужно когда-либо сбрасывать кеши, кроме как проверить это конкретное поведение и показать его кому-то. Если бы память оставалась свободной,тогда ваша дисковая активность ввода-вывода, вероятно, повысится, и ваше приложение, вероятно, станет медленнее.
Также я считаю, что java естественно использует больше памяти, когда видит больше доступной памяти, и требует много параметров, чтобы предотвратить это.
Если из-за этого какой-либо инструмент мониторинга выдает предупреждение об использовании памяти, вам следует исправить инструмент мониторинга, чтобы он давал правильный отчет о фактическом доступном объеме памяти (например, :здесь бесплатно сообщает вам, что 5584 МБ доступно рядом с 156 МБ свободно ).
В качестве примечания: тот факт, что 157 МБ подкачки используются, не является проблемой до тех пор, пока они не загружаются и не выгружаются (, это можно проверить с помощьюvmstat
). Это означает, что для реальной деятельности стало доступно на 157 МБ больше памяти. Это все еще то, за чем нужно следить.
Ядро Linux использует столько памяти, сколько необходимо/возможно, в качестве буферной или кэш-памяти. Это ускоряет работу системы и полностью предназначено. Номер, который вы действительно ищете, находится в колонке под названием «доступно». Если для приложений требуется больше памяти, ОС освободит часть кэш-памяти для использования этим приложением.