metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-02-25 08:31 pm

О странностях jvm

Решил я глянуть, почему валится с исключением жабокложурный сервис при остановке, подключился к нему windbg.
Так вот, у меня оный windbg начал сыпать такими Access Violation на каждое действие внутри jvm, что страшно смотреть, причем это во время работы, и извне оно никак не видно.
Такое ощущение, что там внутри сплошные повреждения памяти и разыменования нулевых указателей, но они все окружены обработкой исключений в любимом жабьем стиле и наружу не выходят.
Как-то это крайне неприятно.

[identity profile] raydac.livejournal.com 2012-02-25 05:39 pm (UTC)(link)
jvm это такая штука вобщем... вобщем она для java

[identity profile] craneop.livejournal.com 2012-02-25 05:49 pm (UTC)(link)
Что-то вы какой то анальной стоматологией занимаетесь, ребе.

[identity profile] metaclass.livejournal.com 2012-02-25 06:03 pm (UTC)(link)
Не, ну вот стандартная задача: сделать виндовс-сервис. Решалась во всех видах и формах на разных языках. Имеет решение для жабы, apache commons daemon. Работающее и после укола вытяжки ядовитой жабы в мозг - даже понятное. С исходниками нативных исполняемых файлов.
Но при остановке сервиса кидает исключение, чего я очевидно, никак не приемлю, например - при остановке виндов вылезшее хуй пойми куда окно отладчика не даст им закрыться некоторое время.
Надо ж разобраться, почему оно так. А там внутри червие.

[identity profile] craneop.livejournal.com 2012-02-25 06:06 pm (UTC)(link)
А у вас кложура под commons daemon такой эффект дает или вообще для любого приложения? Я это к тому, что обычно если в жабе червие, то кто-то уже с этим сталкивался и знает, в чем дело.

[identity profile] metaclass.livejournal.com 2012-02-25 06:34 pm (UTC)(link)
Да, надо попробовать с другими приложениями, особенно тупо один jetty с хелло-ворлд внутри.

[identity profile] metaclass.livejournal.com 2012-02-25 10:13 pm (UTC)(link)
C jetty, без clojure то же самое, валится при выходе.

[identity profile] metaclass.livejournal.com 2012-02-26 03:26 pm (UTC)(link)
Оно. Добавил в приложение system/exit 0, все стало завершаться гуманно.
Что-от там в jvm при некошерной остановке живым оставалось.

[identity profile] nicka-startcev.livejournal.com 2012-02-25 09:43 pm (UTC)(link)
imho, тут не вытяжка жабы нужна, а специальный трех(а лучше четырех)компонентный коктейль, в который должны входить:
1. специфические производные спорыньи, желательно уже нанесенные на марку. В идеале, в подпороговом количестве
2. спиды. Чтоб работать бодро-бодро (и тупо-тупо)
3. эмпатогены (чтоб не проблеваться)
4. медленно действующее успокоительное, чтоб утром, на свежую голову (точнее, на фоне отходняка от эмпатогенов), не наложить на себя руки.

[identity profile] j-sheridan.livejournal.com 2012-02-25 05:50 pm (UTC)(link)
Ребе, не суйтесь к жабам в их болото. Слушайте квакание издалека лучше...

[identity profile] metaclass.livejournal.com 2012-02-25 06:04 pm (UTC)(link)
Я уже глубоко в болоте, обмазываюсь ядовитыми галлюциногенами, которые выделяют жабы из пор на коже.

[identity profile] j-sheridan.livejournal.com 2012-02-25 06:48 pm (UTC)(link)
Ребе, вы осторожнее с этими галлюциногенами. Судя по форумам - они вызывают мутацию головных мозгов и привыкание...

[identity profile] volodymir-k.livejournal.com 2012-02-25 06:40 pm (UTC)(link)
Какие-то гаврики лет 10 назад писали багу, что мол под линуксом отлаживать трудно, постоянно валится с ошибками.
Багу закрыли, потому что именно так инженеры сделали что-то важное, типа исключения, и это ВПОЛНЕ ЗАКОННО. Работает, по перформансу отлично -- какие проблемы? Юзеру надо не отлаживать жвм кривыми дебаггерами, а чтобы работало. Оно работает.

Конкретно у вас могу посоветовать -- попробуйте на другой машине, на другой ОС, на другой JVM. Скорее всего у вас анальный ад с версиями msvcrt678901.dll в разных местах. Ещё вариант -- вы используете самописный jni и конечно не закрываете всё по всем правилам.

[identity profile] metaclass.livejournal.com 2012-02-25 07:41 pm (UTC)(link)
jni там в apache commons daemon присутствует, и стиль в коде мне не очень нравится, так что вполне может быть.

[identity profile] volodymir-k.livejournal.com 2012-02-26 12:36 pm (UTC)(link)
не-а, в демонсах там всё ок. у всех работает без проблем. я про ваши личные jni.

[identity profile] metaclass.livejournal.com 2012-02-26 12:43 pm (UTC)(link)
Я попробовал это дело на чистом jetty, без своего софта вообще - тот же эффект.
У меня такое подозрение, что только остановки jetty недостаточно для того, чтобы jvm можно было корректно закрываться.

[identity profile] stdray.livejournal.com 2012-02-25 09:33 pm (UTC)(link)
Это динамика.

[identity profile] baramin.livejournal.com 2012-02-25 10:07 pm (UTC)(link)
Один умный джигит решил, что переключать контексты через железные прерывания - это хорошо (производительно - как это обосновывалось).
Если быть кратким: для JVM это норма. Но взять биту порой хочется очень. Особливо, когда отлаживаешь AWT или FX какой.

[identity profile] volodymir-k.livejournal.com 2012-02-26 12:37 pm (UTC)(link)
Кстати писали JVM по большей части в Питере. Особенно хотспот.

Рецепт, однако :)

[identity profile] pingback-bot.livejournal.com 2012-02-26 08:36 am (UTC)(link)
User [livejournal.com profile] gineer referenced to your post from Рецепт, однако :) (http://gineer.livejournal.com/69082.html) saying: [...] не наложить на себя руки. http://metaclass.livejournal.com/668688.html?thread=11369744#t11369744 [...]

[identity profile] fukanchik.livejournal.com 2012-02-26 05:35 pm (UTC)(link)
в линуксовой версии то же самое. я так думаю это они так комитят память (VirtualAlloc/MEM_COMMMIT).

В начале работы JVM выдяет одну область непрерывную памяти размером Xmx видимо с VirtualAlloc/MEM_RESERVE в потом видимо по мере необходимости делает коммит на каждый page fault.

[identity profile] dmitry-vk.livejournal.com 2012-02-26 06:06 pm (UTC)(link)
AV, например, используются многими GC для реализации write barrier (например, чтобы отслеживать страницы памяти, в которых произошли изменения). Также, AV используется для safepoint'ов. В общем, не надо так резко на это реагировать.