2017-02-05 7 views
0

Я использовал Tomcat 7 для развертывания приложений. Я выполняю ниже код для получения ошибки OutOfMemory.Java.lang.OutOfMemory не удалось решить при изменении файла setenv.sh в Tomcat 7

Long maxMemorySize = Runtime.getRuntime().maxMemory(); 
model.addAttribute("memorySize",maxMemorySize); 
int[] matrixArr = new int[(int) (maxMemorySize + 1)]; 
for(int i = 0; i < matrixArr.length; ++i) 
    matrixArr[i] = i+1; 

После появляется ошибка, я создаю setenv.sh файл в TOMCAT/бункером и добавьте ниже код в нем.

export CATALINA_OPTS="-Xms512M -Xmx1024M" 

Затем перезапустите сервер Tomcat и запустите программу. Но снова появляется ошибка OutOfMemory. Я изменяю параметры CATALINA_OPTS, но это не работает. А также добавить код ниже в файл setenv.sh, но он также не работает.

export JAVA_OPTS="-Xms512M -Xmx1024M" 

Пожалуйста, помогите мне решить эту проблему.

+0

Возможный дубликат [Как увеличить пространство кучи Java для приложения tomcat] (http://stackoverflow.com/questions/2718786/how-to-increase-java-heap-space-for-a-tomcat -app) – rkosegi

+0

Я думаю, что вы используете неправильный параметр, который будет обозначаться как ** max allocatable ** heap size. см. http://stackoverflow.com/questions/3571203/what-are-runtime-getruntime-totalmemory-and-freememory –

ответ

0

Runtime.getRuntime().maxMemory() вернуть максимальный объем памяти, который будет пытаться использовать JVM.
Возврат 1024M когда -Xmx1024M. В массиве matrixArr необходимо выделить 1024M*4 памяти. Вот почему вы все еще получили исключение java.lang.OutOfMemory после увеличения размера кучи JVM.

+0

Thanx @beckyang. Это помогает мне найти решение. –

0

Вы не можете выделить всю память в виртуальной машине Java. Он требует места для кода программы, определения классов и статических полей во многих классах, которые загружаются.

Кроме того, вы выделяете массив из целых чисел (которые составляют 4 байта на кусок), а ваш maxMemory возвращает значение в байтах.

Так, если maxMemory возвращает 100, то вы попытаетесь выделить массив из 100 ints, который по крайней мере требует 400 байт пространства.

Что вы можете сделать, это использовать IntBuffer.allocateDirect для выделения пространства вне кучи Java.

+0

Thanx @ john16384 –

0

если ваш сервер tomcat работает на Linux-машине и установлен из репозитория, сделайте это .. edit/etc/default/tomcat7. в строке JAVA_OPTS замените значение для -Xmx с (2048m). оставьте все остальное одинаковым. restart tomcat

 Смежные вопросы

  • Нет связанных вопросов^_^