2010-03-18 5 views
-2

hi мы получаем исключение из памяти для одного из наших процессов, который работает в среде unix environmnet. как идентифицировать ошибку (мы заметили, что очень мало шансов на утечку памяти в нашем Java-процессе). так Whatelse нам нужно проанализировать, чтобы найти rootcauaseОшибка outofmemory в java

+2

>> Мы заметили, что в нашем процессе Java очень мало шансов на утечку памяти Что на самом деле вы сделали, чтобы прийти к такому выводу? Вы использовали JMX и отслеживали использование кучи? Что на самом деле пытается использовать приложение? – jagamot

+6

@anil: если ваш код Java так же хорошо написан как ваш вопрос, но и ваш вопрос, я предлагаю дважды взглянуть на код, чтобы убедиться, что он не протекает;) – SyntaxT3rr0r

+2

К счастью, вы не первый, кто столкнулся с этой проблемой, поэтому есть довольно много вопросов (и ответов) относительно предмета :) http://stackoverflow.com/search?q=outofmemoryerror. Стандартный ответ: «Первый профиль (http://java-source.net/open-source/ профилировщики) приложения и в зависимости от результата либо исправить утечку памяти, либо дать ей больше памяти ». Другого пути нет. – BalusC

ответ

1

Я хотел бы предложить использовать профайлер как YourKit (homepage), так что вы можете легко найти то, что выделяет столько памяти.

В любом случае вы должны проверить, какие настройки указаны для вашей JVM, чтобы понять, нужно ли вам больше памяти кучи для вашей программы. Вы можете установить его, указав -X Params:

java -Xmx2g -Xms512m 

бы начать JVM с 2Gb максимальной кучи и отправного размером 512Mb

0

Если нет утечек памяти, того приложение нуждается в большем количестве памяти. Вы выходите из памяти кучи, или в пермскую память или в память? Для памяти кучи и перманентной памяти вы можете увеличить выделение с помощью аргументов -Xmx.or -XX: PermSize соответственно.

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