Java.lang.OutOfMemoryError: пространство кучи Java
используя Jruby, я получаю это сообщение.
Complete Java stackTrace
java.lang.OutOfMemoryError: Java heap space
как разрешить?
Ответы
Ответ 1
TL;DR: jruby -J-Xmx1024m script_you_want_to_run.rb
Как уже упоминалось, ваша программа пытается выделить больше памяти, чем максимальный размер, разрешенный JVM.
Также, как уже упоминалось в других публикациях, вы можете настроить Java для большего объема памяти, передав ее через командную строку с аргументом -Xmx1024m (в качестве примера).
-Xmx - аргумент максимальной памяти, а 1024 м - размер памяти (последний m для мегабайт). Я думаю, что JRuby запускает JVM с максимальной памятью, установленной на 512 м, поэтому вы, вероятно, захотите пойти выше этого.
Чтобы отправить аргументы JVM из командной строки с помощью jruby, вам нужно добавить -J перед аргументом, поэтому ваша командная строка будет выглядеть так:
jruby -J-Xmx1024m script_you_want_to_run.rb
Я также согласен с чувствами утечки памяти: если вы действительно не имеете дело с множеством объектов с ожиданием, что вы можете увидеть эту ошибку, тогда вам может понадобиться изучить возможность того, что ваша программа непреднамеренно побочные эффекты.
Ответ 2
Вы можете настроить размер кучи JVM с помощью опций -Xmx
и -Xms
JVM: -Xmx
для максимального размера кучи и -Xms
для начального размера кучи. Например:.
java -Xms128m -Xmx256m BigApp
Обычно я использую те же настройки для размера начальной и максимальной кучи.
В вашем случае, действительно сложно сказать, как размер JVM без дополнительной информации о том, что вы делаете, когда возникает проблема... Или, может быть, у вас где-то есть утечка памяти и увеличение размера кучи, t help, это просто вызовет проблему позже. В этом случае единственным решением является устранение утечки.
Не в последнюю очередь, всегда помните, что чем больше куча, тем больше основной GC.
Ответ 3
Настройка JRUBY_OPTS
- это решение, которое наилучшим образом подходит для меня. Это было упомянуто в ответе Корея.
set JRUBY_OPTS=-J-Xmx2g
Ответ 4
проверьте JVM-версию jruby с помощью этой команды
jruby -v
Если он возвращает эту строку, это означает, что вы используете 32-битную JVM, поэтому вы не можете установить максимальный размер кучи в >= 2gb
jruby 1.7.3 (1.9.3p385) 2013-02-21 dac429b on Java HotSpot(TM) Client VM 1.6.0_37-b06 [Windows 7-x86]
Вам нужно установить JAVA_HOME на вашу 64-битную версию Java. например.
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_09
Вы увидите следующий результат, если вы снова нажмете команду jruby -v
jruby 1.7.3 (1.9.3p385) 2013-02-21 dac429b on Java HotSpot(TM) 64-Bit Server VM 1.7.0_09-b05 [Windows 7-amd64]
Вы можете видеть, что теперь вы используете 64-битную версию JVM. После этого вы можете установить параметр среды jruby opts следующим образом
set JRUBY_OPTS=-J-Xmx2g
или вы можете запустить свою программу следующим образом
jruby -J-Xmx2g <your ruby program>
Ответ 5
Увеличение размера кучи кучи может быть только полосой. Вам нужно сгенерировать кучу кучи, добавив правильный правильный аргумент:
java -XX:+HeapDumpOnOutOfMemoryError -mn256m -mx512
Это создаст файл, похожий на java _ *. hprof. Затем вы можете использовать набор инструментов с открытым исходным кодом для анализа дампа кучи. Java 1.6 поставляется с JHat, который является своего рода багги и не анализирует большие кучи. Я использую этот удивительный плагин Eclipse: Eclipse Memory Analyzer.
Как только отчет создается из дампа кучи, вы можете увидеть, какие классы занимают больше всего памяти, и вы можете использовать это как отправную точку для отладки кода для обнаружения утечек памяти.
Ответ 6
вы можете установить максимальную кучу в большем размере в командной строке:
java -Xmx512m MyClass
Ответ 7
Либо вы пропускаете память, и вам нужно выяснить, почему или вам нужно предоставить Java больше места для кучи:
java -Xmx512m ...
Ответ 8
Сообщение "Java heap space" указывает, что новые объекты не могут быть выделены в куче Java. Ошибка не обязательно подразумевает утечку памяти приложения. Проблема может быть такой же простой, как проблема с конфигурацией, где указанный размер кучи (или размер по умолчанию, если не указан) недостаточен для приложения.
Потенциальные источники этой ошибки и решений: http://www.blogsoncloud.com/jsp/techSols/java-lang-OutOfMemoryError-Java-heap-space.jsp
Ответ 9
Я сталкиваюсь с аналогичной проблемой, и я не могу найти удовлетворительное решение после googling в течение нескольких часов. Если вам нужно только установить параметры Xms и Xmx, вот что для меня работает:
ps aux | grep java
Узнайте, что на самом деле работает jruby. Убейте его (kill -9 process_id). Повторите команду с собственными параметрами Java в командной строке.
Надеюсь, что это поможет.
Кстати, я использую puma-сервер с Jruby на Rails 4.0, и если кто-нибудь знает более элегантное решение, сообщите мне. Я пробовал все (after_use_hook,.rvmrc,.bashrc и т.д.).
Спасибо.