Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1086811730
Infeligo
2004-06-10 00:08
2004.06.27
Какой софт использовать для зелёного экрана?


10-1014009500
Dima Kalugin
2002-02-18 08:18
2004.06.27
Где взять готовые Корба объекты


14-1086930739
Newbe
2004-06-11 09:12
2004.06.27
Народ где можно найти???


1-1087142375
Bochka
2004-06-13 19:59
2004.06.27
String to Real как правильно записать ?


1-1086844569
DAnton
2004-06-10 09:16
2004.06.27
Как прибавить к дате число.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский