Проект Java EE, слишком много памяти? - PullRequest
0 голосов
/ 07 июня 2010

Я несу ответственность за обслуживание одного сервера, на котором выполняется веб-приложение Java EE. Jboss 4.0 используется в качестве контейнера сервлета, а JVM запускается с объемом памяти, достаточным для запуска приложения (я думаю):

if ["x $ JAVA_OPTS" = "x"]; затем JAVA_OPTS = "- сервер -Xms1500m -Xmx1500m -Dsun.rmi.dgc.client.gcInterval = 3600000 -Dsun.rmi.dgc.server.gcInterval = 3600000" фи

Мне приходится перезапускать jboss каждый день, потому что процесс java начинает использовать много памяти, поэтому приложение работает очень медленно.

Я просто хотел бы знать, может ли это быть проблемой дизайна или проблемой конфигурации jboss.

П.Д .: Я знаю, что написал только несколько деталей, но это то, что у меня есть.

Спасибо.

1 Ответ

1 голос
/ 07 июня 2010

Нет фундаментальных проблем с использованием большого количества памяти. Если размер виртуальной машины слишком велик, и вы создаете много объектов, которые необходимо собирать, вы должны будете чаще выполнять сборку мусора, что чаще означает сборку мусора. Полный GC на очень большой виртуальной машине может вызвать «зависание» до нескольких секунд. Для некоторых приложений это может быть реальной проблемой. В других, возможно, нет.

Вы хотите отслеживать размер виртуальной машины с течением времени, и любой профилировщик сделает это. VisualVM поставляется с Java 6u14 (iirc) или выше, и он это сделает. Если вы наблюдаете за своим приложением с течением времени, вы увидите, что объем памяти увеличивается, а затем внезапно падает, поскольку временные объекты собирают мусор, образуя «пильный» шаблон.

Теперь со временем это может увеличиться (то есть общий наклон увеличится). Это может указывать или не указывать на проблему. Это может указывать на утечку памяти. Это может означать, что вы держите ссылки на объекты, которые вам просто не нужны, чтобы они не были GCed. Или это не может быть проблемой вообще. Это зависит от того, что делает ваше приложение. Например, если с течением времени вы кешируете все больший и больший объем данных в памяти, это может вовсе не быть утечкой, но это может указывать на архитектурную проблему, заключающуюся в том, что вы не очищаете кеши.

1,5 ГБ, однако, это не много памяти, поэтому наличие виртуальной машины такого размера само по себе не является причиной того, что вам приходится перезапускать ее каждый день. Похоже, у вас есть еще одна проблема, и наиболее вероятные виновники - липкие ссылки.

...