Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как обособить нестабильный код? / 25 сообщений из 28, страница 1 из 2
14.01.2013, 10:43:59
    #38108848
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обособить нестабильный код?
Hi All,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

А все современные реализации SOAP Web Service достаточно тяжеловесны.
Ну, минута это перебор. Полноценное приложение с SOAP (один внешний сервис) со spring и hibernate на машине разработчиков стартует за 15 секунд, а на production 5с.
От приложения зависит. Наше стартовало 5 минут. Прогревало кеши.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как обособить нестабильный код? / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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