7

У меня проблемы с сервером, на котором не хватает физической памяти, и у меня возникают проблемы с определением, происходит ли это из процесса 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

Может ли кто-нибудь помочь мне найти эту потерянную память? Я в основном пытаюсь выяснить, не в этом ли моя проблема с приложением, или проблема команды инфраструктуры с их сборкой сервера.

1 ответ1

1

Linux использует политику восстановления, но не помечает как "действительно свободную" любую недавно использованную память (по теории, что ее очистка стоит усилий, оставляя вещи на случай, если кто-то снова их использует, ничего не стоит и может сохранить пакет). Не беспокойтесь об отчетах "свободной памяти". Посмотрите, сколько (если таковой имеется) подкачки используется (своп - это, по сути, дисковое пространство для требований к памяти, которые действительно переполняют физическую память; диск очень медленный, он вам не нужен). Если вас беспокоит производительность, установите и настройте программное обеспечение для мониторинга, такое как печально известный sar (sysstat, конечно, есть пакет для вашей системы), он запишет то, что происходит, в мельчайших подробностях для последующего просмотра. С этими отчетами в руках вы будете знать, что (если что-нибудь) является вашим узким местом. Подсказка о том, что «Преждевременная оптимизация - корень всего зла», заключается в том, что люди, как известно, плохо угадывают реальные проблемы с производительностью и заканчивают "исправлением" чего-то, что работает идеально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .