Форум: "Corba";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Corba";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c