powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как обособить нестабильный код?
28 сообщений из 28, показаны все 2 страниц
Как обособить нестабильный код?
    #38108848
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi All,

Есть библиотека стороннего производителя, позволяющая среди прочего сравнивать отпечатки пальцев. Эта библиотека вызывает DLL через JNI. Из-за нестабильности native-кода в DLL при вызове метода иногда убивается JVM. Соответственно, при вызове этой функциональности из томката у меня приблизительно раз в сутки валится томкат.

Вопрос: как можно обособить вызовы из данной библиотеки (отдельное приложение?), чтобы при вызове не валились контейнеры, и в случае падения можно было бы все поднять?
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108883
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АфриканецИз-за нестабильности native-кода в DLL
в других ЯП любой вызов оборачивают try и всё
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108898
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123АфриканецИз-за нестабильности native-кода в DLL
в других ЯП любой вызов оборачивают try и всё

Не помогает
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108899
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Африканец,
можно написать простенький веб-сервис и вызывать через него эту библиотеку, чтоб сам томкат не валился, а валилась только jvm этого сервиса
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108915
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Африканец,

Ну тоесть пишим отдельное приложение, которое представляет нам через веб-сервис требуемый функционал и это веб-сервис дергаем из томкат, если сервис лежит пробуем через томкат его поднять.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108938
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Судя по тому, что валится не только текущий поток, но и весь томкат, данная dll портит не только память потока, но и всего сервера. Подозреваю, что написана она без учета многопоточности, и при одновременном доступе возникают коллизии. Попробуйте сделать синхронизацию.
Если не поможет, придется писать приложение-обертку, сервисы тут не спасут, они так же будут валить весь сервер.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108982
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,
вообще странно, что dll валит весь сервер. Что за детский сад.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108997
rrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123АфриканецИз-за нестабильности native-кода в DLL
в других ЯП любой вызов оборачивают try и всё

Petro, хватит советовать всякую хрень. В случае segfault в нативном коде, jvm завершает свою работу с coredump'ом, какие try-catch.

Вот GregTk дело сказал - надо, чтобы эта библиотека вызывалась в другом процессе. Можно по RPC, но если там простая передача аргументов, то и Runtime.exec() вполне хватит.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38108998
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123ivanra,
вообще странно, что dll валит весь сервер. Что за детский сад.
Можно свалить любой процесс, если иметь полный доступ к его памяти, а dll его имеет. От банального стирания объектов в куче, до изменения исполняемого кода.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109005
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вообще странно, что dll валит весь сервер. Что за детский сад.
Это нормально. JVM реализована так, чтобы максимально перехватывать и обрабатывать все исключения на системному уровне.
DLL же работает на нативном уровне вне JVM и может делать что угодно с процессом. Поэтому все ошибки не перехваченые на нативному уровне убивают процесс (по крайней мере под виндой). В некоторых случаях можно написать нативную обертку, которая будет перехватывать и обрабатывать исключение. Но это не всегда возможно. Поэтому единственный нормальный способ, который все рекомендуют это запускать параллельные процессы. Лучше нативные, чтобы быстрее стартовали.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109015
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraСудя по тому, что валится не только текущий поток, но и весь томкат, данная dll портит не только память потока, но и всего сервера.
DLL не обязательно что-то портить. Почти любое неперехваченое нативное исключение приведет к крашу JVM.

ivanraПодозреваю, что написана она без учета многопоточности, и при одновременном доступе возникают коллизии. Попробуйте сделать синхронизацию.
Да, это достаточно стандартная проблема для legacy кода в dll. Но это всё равно не обезопасит сервер от других ошибок. Поэтому лучше всего таки запускать отдельные процессы. И многопоточность сохранится.

ivanraЕсли не поможет, придется писать приложение-обертку, сервисы тут не спасут, они так же будут валить весь сервер.
Нужно написать простейший exe, который через параметры командной строки будет запускать DLL функцию. Такие процессы можно почти спокойно плодить на сервере из разных потоков. Важно только чтобы они не утекали.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109020
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rrrrrrrrВот GregTk дело сказал
Ну, почти. Только нафига сервисы какие-то городить. Простейший exe нужен, чтобы новые процессы порождать максимально быстро и таким образом сохранить подобие многопоточности.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109036
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrrrrrrrrВот GregTk дело сказал
Ну, почти. Только нафига сервисы какие-то городить. Простейший exe нужен, чтобы новые процессы порождать максимально быстро и таким образом сохранить подобие многопоточности.
+1
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109072
rrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервис может быть эффективнее, если запуск всей этой конструкции занимает много времени, а вызывается она часто. От кейса зависит.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109086
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rrrrrrrrСервис может быть эффективнее, если запуск всей этой конструкции занимает много времени, а вызывается она часто. От кейса зависит.
GregTk говорил про "веб-сервис". "веб-сервис" будет подыматся заметно дольше чем легковестная обертка в виде exe. К тому же проблемы многопоточности этот сервис тоже не решит.
Причин использовать windows service я тоже не вижу.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109092
rrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Веб-сервис будет подниматься 1 раз, а exe придётся пускать каждый раз.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109125
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rrrrrrrrВеб-сервис будет подниматься 1 раз
При этом он будет подыматься порядка минуты и так же переодически крашится.

rrrrrrrrа exe придётся пускать каждый раз.
Стандартная проблема многих DLL библиотек в том что они не предназначены для многопоточного доступа вообще.
Поэтому запускать exe каждый раз это единственный способ сохранить многопоточность. В противном случае все запросы от сервера придется выстраивать в очередь.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109490
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczivanraСудя по тому, что валится не только текущий поток, но и весь томкат, данная dll портит не только память потока, но и всего сервера.
DLL не обязательно что-то портить. Почти любое неперехваченое нативное исключение приведет к крашу JVM.

ivanraПодозреваю, что написана она без учета многопоточности, и при одновременном доступе возникают коллизии. Попробуйте сделать синхронизацию.
Да, это достаточно стандартная проблема для legacy кода в dll. Но это всё равно не обезопасит сервер от других ошибок. Поэтому лучше всего таки запускать отдельные процессы. И многопоточность сохранится.

ivanraЕсли не поможет, придется писать приложение-обертку, сервисы тут не спасут, они так же будут валить весь сервер.
Нужно написать простейший exe, который через параметры командной строки будет запускать DLL функцию. Такие процессы можно почти спокойно плодить на сервере из разных потоков. Важно только чтобы они не утекали.

Простейший exe здесь не подходит, т.к. параметры - 2 byte[] массива порядка 10 килобайт.

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

Насчет веб-сервисов согласен с предыдущими ораторами: это не вариант.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109585
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АфриканецПростейший exe здесь не подходит, т.к. параметры - 2 byte[] массива порядка 10 килобайт.

Base64, можно просто через файлы передавать, или другой shared ресурс.

АфриканецМожно было бы запустить отдельное приложение (мультитредовое с синхронизацией доступа к внешней библиотеке); если падает - поднимать.
Какой в нём смысл?

АфриканецС другой стороны, можно попробовать синхронизировать доступ к библиотеке в томкате, что я и собираюсь сделать.

Это во-первых исключит возможно выполнять сравнение одновременно для разных юзеров (соотвественно уменьшит производительность). А во-вторых так же не гарантирует от падений.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109640
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, я конечно немного перегнул в понятиях в моём понимании web-service это то что можно вызвать через http например через get или post запросы, я конечно не имел ввиду юзать SOAP во весь рост. А банально взять jetty или вообще обойтись и самой JDK и обернуть все в сервис, который можно дергать по HTTP. Такое решение будет подниматься быстро и работать надежно.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109641
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczАфриканецМожно было бы запустить отдельное приложение (мультитредовое с синхронизацией доступа к внешней библиотеке); если падает - поднимать.
Какой в нём смысл?


Коннектиться к приложению хоть по TCP и передавать туда параметры, получать обратно результат сравнения. Если коннект/вызов не получается или результат не приходит - считаем приложение упавшим (не обязательно по причинам параллельного доступа) и перезапускаем.

BlazkowiczАфриканецС другой стороны, можно попробовать синхронизировать доступ к библиотеке в томкате, что я и собираюсь сделать.

Это во-первых исключит возможно выполнять сравнение одновременно для разных юзеров (соотвественно уменьшит производительность). А во-вторых так же не гарантирует от падений.

Да, от падений по причинам, отличным от параллельного доступа, не гарантирует. С другой стороны, процесс все равно интерактивный, так что лишние миллисекунды ожидания на границе вполне приемлемы.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109852
rrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrrrrrrrrВеб-сервис будет подниматься 1 раз
При этом он будет подыматься порядка минуты и так же переодически крашится.

А кстати почему он будет подниматься порядка минуты? :)
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109855
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rrrrrrrrА кстати почему он будет подниматься порядка минуты? :)
А все современные реализации SOAP Web Service достаточно тяжеловесны.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109917
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrrrrrrrrА кстати почему он будет подниматься порядка минуты? :)
А все современные реализации SOAP Web Service достаточно тяжеловесны.
Ну, минута это перебор. Полноценное приложение с SOAP (один внешний сервис) со spring и hibernate на машине разработчиков стартует за 15 секунд, а на production 5с.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109929
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvBlazkowiczпропущено...

А все современные реализации SOAP Web Service достаточно тяжеловесны.
Ну, минута это перебор. Полноценное приложение с SOAP (один внешний сервис) со spring и hibernate на машине разработчиков стартует за 15 секунд, а на production 5с.
От приложения зависит. Наше стартовало 5 минут. Прогревало кеши.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109933
rrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, у нас jaxws и cxf стартуют за 0.5 сек для маленьких сервисов....
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38109970
Nutz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АфриканецHi All,

Есть библиотека стороннего производителя, позволяющая среди прочего сравнивать отпечатки пальцев. Эта библиотека вызывает DLL через JNI. Из-за нестабильности native-кода в DLL при вызове метода иногда убивается JVM. Соответственно, при вызове этой функциональности из томката у меня приблизительно раз в сутки валится томкат.

Вопрос: как можно обособить вызовы из данной библиотеки (отдельное приложение?), чтобы при вызове не валились контейнеры, и в случае падения можно было бы все поднять?

Можно написать DLL которая вызывается через JNI. Эта DLL через shared memory получает данные из экзешника который читает данные из сбойной DLL. Делал такое на VB, тоже была проблема с рандомным крашем в DLL, который надо было изолировать от основного приложения.
...
Рейтинг: 0 / 0
Как обособить нестабильный код?
    #38110182
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если запускать несколько экземпляров сбойной DLL и выставлять их через любой
интерфейс или протокол (сокеты, pipes, shared mem) то можно в какой-то мере
гарантировать почти постоянную доступность. Из пула DLL-ек хотя-бы одна будет
жива и отработает реквест.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Как обособить нестабильный код?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]