У меня проблемы с сервером, на котором не хватает физической памяти, и у меня возникают проблемы с определением, происходит ли это из процесса Java моего приложения или что-то еще на сервере. Давайте рассмотрим следующий сценарий:
Физическая память сервера: 3747 МБ
Java -Xms64m
Java -Xmx512m
Java XX: MaxPermSize = 512 м
Когда я загружаю сервер, ОС (RHEL) сообщает, что используется 487 МБ, используя ваш любимый инструмент создания отчетов о памяти (top, cat /proc/meminfo | grep Mem, free -m
и т.д.). Когда я запускаю свой Java-процесс (pid 123), он использует около 215 МБ физической памяти (как сообщается в RES-памяти в ps -f -p 123
), в результате чего моя общая используемая память достигает около 700 МБ.
Если я позволю ему работать в течение всего дня, память RES для моего процесса будет немного колебаться, но в целом будет согласованной. Тем не менее, общий объем памяти сервера неуклонно увеличивается примерно до 1500 МБ, в результате чего он достигает 2200 МБ.
Если бы мой размер кучи java или куча perm gen рос, не было ли это отражено в памяти процесса RES?
Кроме того, я не могу объяснить эти дополнительные 1500 МБ в любом месте.
# ps aux | awk '{ RES+=$6 } END { printf("RES: %.2fMB\n", RES/1024) }'
RES: 722.23MB
Может ли кто-нибудь помочь мне найти эту потерянную память? Я в основном пытаюсь выяснить, не в этом ли моя проблема с приложением, или проблема команды инфраструктуры с их сборкой сервера.