Приложение Play Framework аварийно завершает работу в Linux

У меня есть приложение Play (1.2.4), которое отлично работает на моей 64-битной машине с Windows 7.

У меня было несколько сбоев, когда я работал на бета-версии Java 7.0; эти сбои JavaVM будут появляться при определенных модификациях кода, но без какой-либо "логической" причины (например, добавление класса администратора crud), но я переключился на последнюю версию 7.0_2, и теперь с Windows все в порядке.

НО моя машина (и) для развертывания - это Linux.

Опять же, все работает нормально, но после моего недавнего обновления кода он продолжает давать сбой.

~ play! 1.2.4, http://www.playframework.org
~
~ Ctrl+C to stop
~
Listening for transport dt_socket at address: 8000
05:20:36,845 INFO  ~ Starting /home/scrosta/PROJECT
05:20:36,849 INFO  ~ Module crud is available (/home/scrosta/play-1.2.4/modules/crud)
05:20:36,849 INFO  ~ Module jqueryui is available (/home/scrosta/PROJECTNAME/modules/jqueryui-1.0)
05:20:36,850 INFO  ~ Module logisimayml is available (/home/scrosta/PROJECTNAME/modules/logisimayml-1.5)
05:20:36,850 INFO  ~ Module secure is available (/home/scrosta/play-1.2.4/modules/secure)
05:20:36,851 INFO  ~ Module deadbolt is available (/home/scrosta/PROJECTNAME/modules/deadbolt-1.4.3)
05:20:37,461 WARN  ~ You're running Play! in DEV mode
05:20:37,522 INFO  ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
05:21:07,468 INFO  ~ Connected to jdbc:h2:mem:play;MODE=MYSQL
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f3c3cb7a438, pid=17664, tid=139896551085824
#
# JRE version: 6.0_22-b22
# Java VM: OpenJDK 64-Bit Server VM (20.0-b11 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea6 1.10.4
# Distribution: Ubuntu 11.04, package 6b22-1.10.4-0ubuntu1~11.04.1
# Problematic frame:
# V  [libjvm.so+0x5ec438]  PhaseIdealLoop::build_loop_late_post(Node*)+0x158
#

Весь журнал доступен на сайте pastie

Я тестировал одну машину Gentoo: IcedTea Java 6 и Oracle Java 7, а также другую машину Ubuntu с IcedTea Java 6. Та же проблема. И никаких проблем с Windows.

Я снова запустил зависимости и тоже играл чисто.

Есть идеи, что может спровоцировать это, как решить, как отладить ...?

PS.

play precompile

работает нормально.

РЕДАКТИРОВАТЬ

Как я уже упоминал, я получал почти такую ​​же ошибку в Windows перед переключением на последнюю версию Java 7.0_2.

Поскольку в Linux я получал его с JDK 6 и 7 от двух разных поставщиков, я подумал, что это не может быть связано.

НУ, в конечном итоге удаление одного из моих контроллеров Crud решает проблему - это означает, что приложение запускается снова.

Таким образом, у меня возникает соблазн обвинить модуль CRUD (но надеюсь, что новое обновление Java для Linux решит проблему).

Если кто-нибудь из игры! интересно узнать больше о моих классах crud, прокомментируйте, пожалуйста.

Изменить 2

Удаление некоторых примитивных классов, по-видимому, решило проблему, как бы неоднозначно это ни звучало.

Но теперь мне пришлось перейти к развертыванию JBoss, и ошибка снова вернулась!

На самом деле это приводит к сбою всего JBoss с точно такой же ошибкой ...


person Stefano    schedule 02.01.2012    source источник
comment
Поскольку ваша ошибка воспроизводима, поставьте ее на маяк. play.lighthouseapp.com/projects/57987-play-framework/overview   -  person Codemwnci    schedule 02.01.2012
comment
@Codemwnci это воспроизводимо, но только с моим полным кодом проекта, которым я не могу поделиться ... но я подробно расскажу обо всем, что могу придумать, и подам заявку   -  person Stefano    schedule 02.01.2012
comment
play.lighthouseapp.com/projects/57987/ билеты /   -  person Stefano    schedule 02.01.2012


Ответы (3)


Просто обновите JDK до последней версии Jdk 1.7 7u7, и проблема будет решена, теперь проблема решена путем udgrading jvm

person Gp2you    schedule 10.09.2012

Я думаю, вашим классам нужно много места. Видеть

PSPermGen       total 40448K, used 40403K [0x000000067c400000, 0x000000067eb80000, x0000000686a00000)
object space 40448K, 99% used [0x000000067c400000,0x000000067eb74e08,0x000000067eb80000)

поэтому я бы порекомендовал увеличить размер разрешения и создать отчет об ошибке в openjdk. Потому что я думаю, что нужно выбросить OutOfMemoryError.

Здесь вы можете получить дополнительную информацию о разрешении.

person niels    schedule 02.01.2012
comment
Привет @niels, я пробовал почти все, но все еще сталкивался с той же проблемой. Я попробовал запустить игру с play run ---XX:MaxPermSize=512M -XX:PermSize=256M -Xmx1024M: сначала попробовал только MaxPerm, потом Perm, потом тоже добавил Xmx ... ошибка никогда не меняется. Намек? Спасибо... - person Stefano; 04.01.2012
comment
У вас все еще та же ошибка в PSPermGen total 512M ... 99% used? Тогда мне кажется, что в OpenJDK есть ошибка, которая не очищает эту часть памяти. - person niels; 04.01.2012
comment
Да всегда на 99% используется. Тот факт, что он работает на моем компьютере с Windows с обновленной версией java 7.0_2, заставляет меня думать, что это тоже ошибка jdk ... Но как в openjdk, так и в oracle? Я сравню логи и дам вам знать. И Play на самом деле должен занимать очень мало памяти даже при динамической компиляции ... - person Stefano; 04.01.2012
comment
Теперь он снова вылетает в моей Windows с 1.7.0_02. Опять же, удаление контроллеров crud решает проблему: / - person Stefano; 14.01.2012

Это определенно ошибка Java из-за компилятора Eclipse.

На play.lighthouse есть ошибка, которую нужно отслеживать.

Кажется, что классы CRUD усугубляют проблему, и нехватка памяти тоже; проблема будет иметь тенденцию исчезать и возвращаться только для горячей компиляции (изменение кода Java без перезапуска), и даже не всегда.

С другой стороны, развертывание в JBoss определенно приводит к полным сбоям.

С небольшими примитивными классами и большим количеством доступной памяти ситуация улучшается, поэтому в качестве обходного пути, когда вы действительно не можете делать ничего другого: уменьшите до минимума количество классов CRUD; повторное использование декоратора @For, похоже, ухудшает ситуацию.

Кроме того, использование Java 6 намного более стабильно - менее чувствительно к памяти - особенно с JBoss.

Я отмечу это как решенное, потому что, кроме трюка CRUD и предложения использовать Java 6, на этом уровне больше ничего нельзя сделать.

person Stefano    schedule 21.02.2012