Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

Corba ест память!!!   Найти похожие ветки 

 
comwad ©   (2002-02-11 15:14) [0]

Здравствуйте!
Сервер приложений Corba запущен на компьютере, где находится MS-SQL сервер.
При подсоединении очередного тонкого клиента растет память Сервера приложений и несоизмеримо растет память sqlservr.exe. Если клиент некорректно «отвалится»,то памяти Сервера приложений не уменьшается, а при новом соединении увеличивается. В итоге надо перезагружать весь компьютер с серверами , спасаясь от переполнения виртуальной памяти.
Что делать , где прокол?
Спасибо.


 
Олег Лаукарт ©   (2002-02-11 16:56) [1]

Если я правильно понимаю, то сервер приложений ваш собственный, значит проблема в нем - он не контролирует освобождение памяти при обрыве связи с клиентом. Если каждому клиенту выдается ссылка на персональный объект, тоесть сервер является фабрикой корба объектов, то на него ложится задача вовремя убить этот объект. Я знаю два способа, но идеального варианта нет, в каждом свои проблемы. Оба расчитаны на то, что сервер (фабрика), при обнаружении потери связи с клиентом удаляет объект. Это может также произойти, если клиент "долго" (в понимании сервера о контроле нагрузки на систему) не использует объект. Тогда его тоже можно удалить, а клиент если ему всетаки надо, может подключится еще раз.
Метод 1. Клиент при подключении оставляет серверу CallBack интерфейс с единственным методом для проверки его активности void IsActive (); это должен быть пустой метод и его задача протестировать связь. Если при его вызове возникает ошибка - клиент мертв. Сервер периодически вызывает у всех клиентов этот метод и удаляет "трупики".
Метод 2. Для каждого объекта сервер хранит время предыдущего использования, и если интервал превышает допустимый, то принимаем меры. Для оптимизации можно держать список объектов с временем и при использовании объекта перемещать его выше (в начало). Периодически надо проверять хвост списка и удалять если надо.

На самом деле можно совмещать оба метода.


 
nikols ©   (2002-02-11 16:56) [2]

При соединении с сервером создается обьект Session. Довольно ресурсоемкий обьект. То, что при его создании растет память - естественно. Мое мнение - при некорректном завершении работы надо предусмотреть способ уничтожения соединения - например отслеживать время с последнего обращения клиента к соединению и при превышении предела уничтожать, либо еще как. Это задача программиста.


 
nikols ©   (2002-02-11 17:05) [3]

Пр написании POA ориентированного сервера CORBA можно при создании серванта задать время, по истечении которого, если не было к нему обращения - он уничтожается либо деактивируется. Если соединение создано в серванте, то и его можно уничтожить... Но это POA, его пока в Delphi нет...



Страницы: 1 вся ветка

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
14-1086680613
Vovchik_A
2004-06-08 11:43
2004.06.27
Нервных прсят не смотреть


8-1081715003
Gott
2004-04-12 00:23
2004.06.27
Звукозапись


8-1081334975
Mantic0re
2004-04-07 14:49
2004.06.27
Кэширование миниатюр..


8-1081833080
$tranger
2004-04-13 09:11
2004.06.27
Координатная плоскость


14-1086361745
Jeer
2004-06-04 19:09
2004.06.27
Терракт в Самаре