Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Совместное использование памяти двумя приложениями, Как это сделать? 
V
    Опции темы
powerOn
Дата 14.1.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



По поводу расшаривания объектов, есть предложение посмотреть в сторону JMX (Java Management Extensions). Я с этой технологией не работал, но на сколько знаю, она позволяет одной JVM подключиться к другой и, грубо говоря, дернуть метод у объекта. В целом JMX создавалась как средство мониторинга Java приложений.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
serger
Дата 14.1.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Цитата(Prol @ 14.1.2008,  09:34)
Не имеет значения, что делает приложение.
Я описал работающий метод защиты от сбоев приложения с использованием механизма shared memory и спросил, возможно ли сделать такое не для приложения на С, а для приложения на Java ?

Банальный вопрос а зачем?

Ещё хуже. Зачем делать так же как на с?

 smile,  но не совсем..
Язык определяет мышление. Нельзя на одном писать средствами другого.

Я считаю, с таким подходом, даже если что-то и получится, то будет держаться только на Вашем интузиазме. А приемнику Вы окажите медвежью услугу.


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
w1nd
Дата 14.1.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(powerOn @  14.1.2008,  10:02 Найти цитируемый пост)
В целом JMX создавалась как средство мониторинга Java приложений.

Как средство управления с универсальным интерфейсом.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
serger
Дата 14.1.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5





--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
serger
Дата 14.1.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



около 400к данных в секунду приходит?



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 14.1.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(serger @ 14.1.2008,  11:39)
около 400к данных в секунду приходит?

Это суммарный входящий/исходящий. Пропорция примерно 100к входящего на 300к исходящего от приложения в секунду.

Добавлено через 11 минут и 40 секунд
Цитата(serger @ 14.1.2008,  10:20)
Цитата(Prol @ 14.1.2008,  09:34)
Не имеет значения, что делает приложение.
Я описал работающий метод защиты от сбоев приложения с использованием механизма shared memory и спросил, возможно ли сделать такое не для приложения на С, а для приложения на Java ?

Банальный вопрос а зачем?

Как зачем?

Затем, чтобы обеспечить сохранность данных, разделяемых двумя приложениями, при любых практически сбоях одного из приложений. :о)
PM MAIL WWW ICQ   Вверх
powerOn
Дата 14.1.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(Prol @  14.1.2008,  22:30 Найти цитируемый пост)
Пропорция примерно 100к входящего на 300к исходящего от приложения в секунду.


Цитата(Prol @  14.1.2008,  22:30 Найти цитируемый пост)
Затем, чтобы обеспечить сохранность данных, разделяемых двумя приложениями, при любых практически сбоях одного из приложений. :о) 


Большинство из БД могут удовлетворить этим требованиям. Например Apache Derby (Java DB) прекрастно с этим справится. Просто настройте 2 приложения работать с одной БД. Более того, при работе с БД, вы имеете возможность сохранить данные даже при крахе обоих приложений.

Хотя, честное слово, ума не приложу, в чем может быть причина, что одно из приложений упадет...


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
batigoal
Дата 15.1.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(powerOn @  15.1.2008,  00:46 Найти цитируемый пост)
Хотя, честное слово, ума не приложу, в чем может быть причина, что одно из приложений упадет...

Ну как раз тут-то у меня сомнений нет, redundancy обеспечивать нужно. Вот только что толку от двух экземпляров программ, запущенных на одной машине, мне неясно. Умрет диск - и до свиданья. Так что лучше обеспечивать беперебойность кластеризацией (базы, или application-серверов, или каких-то самописных программ).


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
COVD
Дата 15.1.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Банальный вопрос а зачем?


праивильный ответ 

Цитата

Мои приложения на С.

Я хочу их портануть на Java, потому что мне так кажется удобнее передать моему наследнику  ...



PM MAIL   Вверх
Prol
Дата 15.1.2008, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Ок, я понял, что не могу доходчиво донести. Попробую по другому.

Фаза инициализации более трёх миллионов объектов в памяти занимает более 15 минут. Они читаются из БД и размещаются в памяти одним приложением. В случае, если ОС снимет это приложение, то время повторного перезапуска займёт те же более 15 минут, каковое время недопустимо по требованию заказчика.

Поэтому я запускаю две копии одного приложения. Первая копия при первом старте тратит 15 минут на чтение и размещение объектов в shared memory памяти и падает в sleep.
После того, как я вижу, что первое приложение отинитилось, то запускаю вторую копию этого же приложения. 
Поскольку оба приложения используют shared memory, то второе приложение (оно точно такое же по коду как и первое) получает уже отиниченную память со всеми тремя миллионами объектами и приступает к отработке очереди сообщений всего за одну секунду.

В случае сбоя в приложении, ОС снимает именно то приложение, в контексте которого произошёл сбой, то есть второе, потому что именно оно что-то делает, а первое остаётся в слипе, сохраня всю память со всеми тремя миллионами объектов в текущем состоянии обработки.
Рестартовав второе приложение за одну секунду, оно продолжает работать, откатив последнюю транзакцию.

Можно ли так сделать на Java?

Добавлено через 3 минуты и 32 секунды
Цитата(batigoal @ 15.1.2008,  00:11)
Ну как раз тут-то у меня сомнений нет, redundancy обеспечивать нужно. Вот только что толку от двух экземпляров программ, запущенных на одной машине, мне неясно. Умрет диск - и до свиданья. 

Если умрёт диск (это тоже неважно, потому что диск не используется), ОС снимет второе приложение по сбою ввода-вывода, но первое приложение останется в памяти и сохранит все данные :о)
PM MAIL WWW ICQ   Вверх
Prol
Дата 15.1.2008, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Грубо говоря, можно ли примерно так? :

Код

class Keeper {
    long oneGigabyteArea = 1000000000;
    global SharedMemory myarea = new SharedMemory(oneGigabyteArea);
    public static void main(String args[]) {
         World earth = myarea.new World();
         Man ivanov = myarea.new Man();
    }
}

class Utilizateur {
    global SharedMemory myarea = Keeper.myarea;
    public static void main(String args[]) {
         World earth = myarea.earth;
         Man petrov = myarea.new Man();
         // теперь у нас в шаред мемори есть Иванов и Петров, доступные из обоих приложений.
         // если  JVM завершит приложение Utilizateur, то в Keeper.myarea всё равно остануться 
         // и Иванов и Петров.
    }
}




Это сообщение отредактировал(а) Prol - 15.1.2008, 04:16
PM MAIL WWW ICQ   Вверх
intr
Дата 15.1.2008, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Дальше небольшой smile 

Помню пришлось дорабатывать код написанный бывшими PHPшниками, это был их первый большой проект на Java. 
Таких извращений в коде я больше никогда не виделsmile Да кстати их проект был переписан с PHP на Java:)

p/s
а оно надо переписывать с си на Java? Ведь работает и устраивает заказчика. А если код стабилен то проще найти нормального сишника!

p/s/s
А сборка мусора это действительно большие грабли для реалтаймовых системsmile У меня томкет всегда за разное время обрабатывает запросы, иногда бывает что время отличается на порядок (для тестового приложения без бд).
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
serger
Дата 15.1.2008, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Цитата(Prol @ 15.1.2008,  02:10)
Можно ли так сделать на Java?

 smile 
А может ли волк понять овцу?

И может ли овца стать волком?

Задачи надо решать средствами языка, иначе будет.. ну что-то на 5 точке ;)

Те я хочу сказать, что простой переделкой кода тут не обойдёшься. Надо переделывать архитектуру системы с точки зрения java и как это на java делается.
Готовы Вы на это пойти, или нет - это Вам решать.

Ну и есть принцип. Работает, не трожь!


Это сообщение отредактировал(а) serger - 15.1.2008, 06:27


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 15.1.2008, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(intr @ 15.1.2008,  04:26)
p/s/s
А сборка мусора это действительно большие грабли для реалтаймовых системsmile У меня томкет всегда за разное время обрабатывает запросы, иногда бывает что время отличается на порядок (для тестового приложения без бд).

Не такие уж и большие грабли - этот garbage collector.
По крайней мере его можно заставить убирать мусор не когда ему требуется, а когда нам требуется.

Код

class Demo {
   public static void main(String args[]) {
      // получаем ссылку на текущее выполняемое приложение в JVM
      Runtime currentApp = Runtime.getRuntime();
      // там где нужно, вызываем сборщик мусора для этого приложения
      currentApp.gc();
   }
}

PM MAIL WWW ICQ   Вверх
serger
Дата 15.1.2008, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



это не так
Это лишь уведомление о необходимости - jvm САМА решает когда запускать.


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.