Как улучшить объем памяти, используемой Jboss? - PullRequest
1 голос
/ 18 ноября 2010

У меня есть приложение Java EE, работающее на jboss-5.0.0.GA.Приложение использует инструмент отчетов BIRT для генерации нескольких отчетов.

Сервер имеет 4 ядра по 2,4 ГГц и 8 Гб оперативной памяти.

В сценарии запуска используются следующие параметры:

 -Xms2g -Xmx2g -XX:MaxPermSize=512m

Приложение достигло некоторой стабильности с этой конфигурацией, некоторое время назад у меня было много сбоев из-за того, что память была полностью заполнена.

Прямо сейчас, приложение не падает, но памятьвсегда полностью используется.Пример команды top:

Mem:   7927100k total,  7874824k used,    52276k free

В процессе Java используется 2,6 г, и это единственное приложение, работающее на этом сервере.

Что можно сделать, чтобы обеспечить количествосвободной памяти?

Что я могу сделать, чтобы попытаться найти утечку памяти?

Любое другое предложение?

TIA


На основе ответаmezzie:

Если вы используете linux, то, что ядро ​​делает с памятью, отличается от того, как работают окна.В Linux он будет пытаться использовать всю память.После того, как он использует все, он затем перезапустит память для дальнейшего использования.Это не утечка памяти.У нас также есть jboss tomcat на нашем linux-сервере, и мы некоторое время назад изучали эту проблему.

Я нашел больше информации об этом,

https://serverfault.com/questions/9442/why-does-red-hat-linux-report-less-free-memory-on-the-system-than-is-actually-ava

http://lwn.net/Articles/329458/

И хорошо, половина памяти кешируется:

             total       used       free     shared    buffers     cached
Mem:          7741       7690         50          0        143       4469

Ответы [ 3 ]

1 голос
/ 18 ноября 2010

Если вы используете Linux, то, что ядро ​​делает с памятью, отличается от того, как работают окна.В Linux он будет пытаться использовать всю память.После того, как он использует все, он затем перезапустит память для дальнейшего использования.Это не утечка памяти.У нас также есть jboss tomcat на нашем Linux-сервере, и мы некоторое время назад занимались этой проблемой.

1 голос
/ 18 ноября 2010

Для простоты, максимальный объем используемой нами памяти JVM равен MaxPermGen (постоянно используется во время работы вашей JVM. Он содержит определения классов, поэтому он не должен увеличиваться с нагрузкой вашего сервера) + Xmx (max размер кучи объектов, которая содержит все экземпляры объектов, в настоящее время работающих в JVM) + Xss (пространство стеков потоков, в зависимости от количества потоков, работающих в вашей JVM, которое может быть в большинстве случаев ограничено для сервера) + Пространство прямой памяти (устанавливается -XX: MaxDirectMemorySize = xxxx)

Сделайте также и математику. Если вы хотите убедиться, что у вас есть свободная память, вам придется ограничить MaxPermGen, Xmx и количество потоков, разрешенных на вашем сервере.

Риск, если нагрузка на ваш сервер растет, вы можете получить ошибку OutOfMemoryError ...

1 голос
/ 18 ноября 2010

Бьюсь об заклад, это значения памяти операционной системы, а не значения памяти Java. Java использует всю память вплоть до -Xmx, а затем начинает собирать мусор, что значительно упрощает процесс. Используйте jconsole, чтобы увидеть реальное использование памяти Java.

...