У меня есть VPS с ubuntu 18.04.4 с 2 ГБ и 512 МБ подкачки. Работает исправно с 600-800мб и свопом 100мб и все хорошо.
2 недели назад я обновил WAR (tomcat), и объем памяти увеличился до 1,2 ГБ и подкачки 400-500 МБ. Сначала я подумал, что это нормально, потому что я изменил что-то, что должно потреблять больше памяти.
Мне нужно было перезапустить сервер (по другой причине). Только тогда я понял, что память опять опустилась до 600-800мб и своп 300мб и так было какое-то время. То есть ранее что-то забирало память, и она была освобождена при перезапуске.
Через 2 недели с таким же потреблением я обновил WAR и снова заметил, что после повторного развертывания память подскочила до 1,2 ГБ при свопе 400 МБ. На этот раз я только перезапустил службу tomcat, и потребление памяти упало до 600 МБ и 100 МБ подкачки.
htop показывает, что Java - это та, которая потребляет память, но как я могу узнать, что именно загружает память после отмены развертывания / развертывания, что только перезапуск службы освобождает ее?
Спасибо
https://www.linuxatemyram.com/
Операционная система использует всю доступную память, даже если пространство подкачки не используется.
Не прилагайте особых усилий, чтобы снизить уровень использования до 50%. К этому просто снова привыкнешь. И вряд ли будет что-то сильно беспокоить, когда загрузка колеблется на уровне, который звучит как хорошие 60%. Например, любые кеши файловой системы любой копии файла приложения будут быстро освобождены, если потребуется для другой памяти.
Лучше наблюдайте, как само приложение работает медленно. Установите целевое время отклика пользователя или подобное и следите за тем, как вы выполняете целевой сервис. Взаимодействие с пользователем гораздо важнее, чем, по вашему мнению, должно быть использование памяти.
Чтобы узнать о показателях памяти ОС, в Linux следите за страницей. ставки. Система с нехваткой памяти будет иметь высокую скорость загрузки страниц, так как ей необходимо вернуть память для работы. Это делает систему просто медленной, так как пространство подкачки намного медленнее, чем DRAM.
И, очевидно, полная нехватка памяти - это плохо, убийца OOM или, может быть, паника. Но это происходит гораздо ближе к 0 доступным страницам. Вы не показали доказательств серьезного давления на память.
В Java есть собственная настройка памяти: между сборкой метрик кучи, настройкой и предотвращением пауз при сборке мусора. Это вопрос в другой раз, возможно, после того, как вы изучите шаблоны кучи этого приложения и оцените, какой у вас действительно есть бюджет памяти на этом экземпляре 2 ГБ.