2012-06-25 4 views
1

У меня есть приложение, написанное на Java, которое «убито» после некоторого времени работы.Почему OutOfMemoryError не сгенерирован?

Приложение Java запускается из сценария SH под Linux, который работает некоторое время. После этого отображается PID и «убитое» слово.

Как это:

runMyServer.sh: line 3: 3593 Killed   java -Xmx2024m -cp ... 

Существует информация о внешнем событии памяти в системном журнале. Таким образом, это выглядит как ошибка памяти.

Мой вопрос: когда исключение OutOfMemroyError не может быть создано?

+0

Как выглядит запись в системном журнале? вы можете вставить его здесь? –

+0

попробуйте запустить приложение без сценария .sh. Я думаю, что он создан, просто не отображается. – 11684

+0

@ 11684 Как я могу воспроизвести ситуацию, когда заявка заявлена ​​«убита»? – Dims

ответ

2

Возможно, у вас слишком мало памяти в вашей системе или запущены процессы, которые съедают все бары и свопы. Когда у GNU/Linux заканчивается память, он будет убивать процессы, используя много памяти. Это в основном просто убивает процесс, так что это не у вас процесс Java, который исчерпал память, а скорее на ОС.

+0

Как предотвратить систему, чтобы убить мою программу? Почему он не убивает что-то еще? У меня 6G, а моя куча java ограничена 2G. – Dims

+1

@ Dims Сколько свободной памяти у вас есть? Существуют ли другие процессы, использующие ту же сумму или больше бара? В основном процесс с наибольшим временем работы ram/cpu убивается, поэтому чем больше бара, тем меньше вероятность его убийства. Сколько баров использует ваши цены на java, он будет использовать больше, чем кучу. Вот еще информация http://lwn.net/Articles/317814/ –

+0

Уверен, что у меня есть еще один процесс, и один из них принадлежит мне и хочет 3G. Я понимаю, что у меня недостаточно памяти, но я хочу контролировать ситуацию ... – Dims

0

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

dd if=/dev/zero of=/swapfile bs=1M count=2048 
chmod 600 /swapfile 
mkswap /swapfile 
swapon /swapfile 
echo "/swapfile    swap     swap defaults  0 0" >> /etc/fstab 
echo 2 > /proc/sys/vm/overcommit_memory 
Смежные вопросы