Главная страница
    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.043 c
3-1086182785
Lego
2004-06-02 17:26
2004.06.27
проблема с именем таблицы...


6-1083531649
ohiio
2004-05-03 01:00
2004.06.27
Блокировать трафик от известного IP


8-1081509688
Kreon
2004-04-09 15:21
2004.06.27
TCanvas.LockCount - что за свойство?


1-1087215804
Артем
2004-06-14 16:23
2004.06.27
Проблемы с нодом в TreeView


1-1087305419
}|{yk
2004-06-15 17:16
2004.06.27
Как добавить строку в Memo





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский