Как определить выгрузился ли агент полностью?

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#1
В общем есть агент, скорее всего скриптовый с большим количеством какого-то там кода.
Как можно определить выгрузился ли он полностью?
Это вообще даже чисто теоритически возможно?
Агент может содержать свои самописные классны, сорваться по ошибке и часть памяти он таким макаром точно ужрёт.
Агент может делать репликацию и тем самым тоже будет сорван, если не справится по таймауту.
Агент может делать синхронизацию по ODBC/JDBC и т.д. и опять тако сорвется.
Ну и т.д.
В общем есть ли какой-то LS скрипт, который в состоянии это определить и не сработать ложно, когда агент менеджер кешируют часть базы(зачем он это делает тоже не понятно)???

Решения типа постоянного мониторинга памяти, загрузки и прочего не интересует.
Интересует исключительно определение постфакта, что агент "весь не вышел"
Да и куда это повесить, терминейт агента как по мне не поможет, так как не говорит о полной выгрузке, использовать связку агент запускает агента?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#2
А есть ли подтверждение того, что проблема вообще существует?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#3
Akupaka
вот когда смогу создать такой механизм сразу и сообщу, есть ли такая проблема и чем конркретнее она может быть вызвана
 

duchan

Well-known member
20.09.2006
110
3
#5
например, если агент серверный, то можно с консоли "посмотреть" чем агент менеджер занимается...
см.NotesSession.SendConsoleCommand ;)

ну или как-то вытащить agent log - правда прямых способов для этого не помню, через API походу только...
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#6
например, если агент серверный, то можно с консоли "посмотреть" чем агент менеджер занимается...
см.NotesSession.SendConsoleCommand

ну или как-то вытащить agent log - правда прямых способов для этого не помню, через API походу только...
ни то ни другое не обьясняет мне факт, почему к концу дня процессы nAmgr.exe сьедают по гигу вируальной памяти и нет ни одного средства это сбросить кроме как выгрузить Amgr
 

duchan

Well-known member
20.09.2006
110
3
#7
ни то ни другое не обьясняет мне факт, почему к концу дня процессы nAmgr.exe сьедают по гигу вируальной памяти и нет ни одного средства это сбросить кроме как выгрузить Amgr
ну, как мне видится, тут скорее проблема не столько агентов, сколько агентменеджера, теряющего память, и версии сервера....
некоторые версии теряли память и не только, лечилось только апгрейдом сервера...

Все доступные программные средства в лотусе интерпритируемые среды, сам по себе агент упасть не может, падает агентменеджер его выполняющий. так же агентменеджер отвечает за сбор "мусора" - освобожденной памяти, так что если агент недовыполнился то агентменеджер должен ВСЕ подчистить, если он этого не делает, значит проблема в нем, значит надо его менять на более "свежую" или работающую версию, а это только вместе с сервером.... :)
 

akat

Lotus team
16.06.2010
243
4
#8
ToxaRat,
а в ваших агентах есть вызовы COM-объектов, или других инородных лотусу тел?:)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#9
AlexeyKatyushyn
агенты не обязательно мои, это общая конценция, которую я тоже хочу контролировать :)
 

akat

Lotus team
16.06.2010
243
4
#10
это общая конценция, которую я тоже хочу контролировать wink.gif
Если провести аналогию, то в случае разработки веб-приложения (не на Домине) и использования плагинов в браузере, вы бы хотели конроллировать, что плагин отработал и выгрузился:facepalm:

ИМХО, КЕСАРЕВО - КЕСАРЮ...
Т.е. скорее вопросы к IBM.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#11
Если провести аналогию, то в случае разработки веб-приложения (не на Домине) и использования плагинов в браузере, вы бы хотели конроллировать, что плагин отработал и выгрузился

ИМХО, КЕСАРЕВО - КЕСАРЮ...
Т.е. скорее вопросы к IBM.
данный вопрос я рассматриваю и как в контектсте своего анализатора - http://codeby.net/forum/threads/31210.html
и как в контексте своей СЭД, которую любым доступным мне способом пытаюсь сделать совершеннее

врядли ИБМ может помочь мне решить этот вопрос, так как все их мануалы, редбуки и прочее я уже читал

а вот ответ такого вида, хоть направил меня куда-то:
Код:
Re: Hidden functions in LotusScript: Lsi_info() 
I was interested to learn about the lsi_info() function recently, but could not seem to find any documentation on it, except for 3 parameters for LS memory. I wrote a small chunk of script (in a web agent) to test the function, as follows: 

For i=0 To 255 
Print Cstr(i) & "=" & Lsi_info(i) & "<BR>" 
Next 


Unfortunately it's almost impossible to speculate on the meaning of each of the 
variables, so was near useless. I have discovered though (correct me if my 
guess is wrong): 


lsi_info(2) = The name of the currently executing function 
lsi_info(6) = The version of LotusScript running (!?) 
lsi_info(9) = Current language (en for english) 
lsi_info(12) = The name of the function that called this one 


These I have seen documented on Notes.net: 
lsi_info(50) = LS memory allocated 
lsi_info(51) = LS memory allocated from OS 
lsi_info(52) = LS blocks used
 

nvyush

Lotus team
22.04.2009
2 317
0
#13
а вот ответ такого вида, хоть направил меня куда-то:
Советую почитать: LSI_Info Not Thread Safe
Если не отбило охоту использовать Lsi_info, то на 255 доступные команды не заканчиваются:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Const LSI_INFO</div></div><div class="sp-body"><div class="sp-content">Public Const LSI_INFO_SOURCE_LINE = 1 'current line number
Public Const LSI_INFO_PROC = 2 'name of current procedure
Public Const LSI_INFO_MODULE = 3 'name of current module
Public Const LSI_INFO_VERSION = 6 'LotusScript version number
Public Const LSI_INFO_LANGUAGE = 9 'language setting
Public Const LSI_INFO_COUNTRY = 10 'country or region setting
Public Const LSI_INFO_CALLPROC = 12 'name of calling procedure
Public Const LSI_INFO_CALLMODULE = 13 'name of calling module
Public Const LSI_INFO_MEMORY = 50 'LotusScript memory allocated
Public Const LSI_INFO_MEMORY_OS = 51 'LotusScript memory allocated from OS
Public Const LSI_INFO_MEMORY_BLOCKS = 52 'LotusScript blocks used
Public Const LSI_INFO_TICKS_PER_SEC = 98 'clock ticks per second
Public Const LSI_INFO_TICKS = 99 'current clock ticks
Public Const LSI_INFO_PROCESS_ID = 400 'process ID
Public Const LSI_INFO_LINE = 420 'current line number
Public Const LSI_INFO_CALLLINE = 430 'line number of calling module
Public Const LSI_INFO_PLATFORM = 440 'platform information
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#14
nvy
о, чем дальше копаешь тем больше интересного узнаёшь

а есть где-то полный список по этой функции?
 

nvyush

Lotus team
22.04.2009
2 317
0
#15
а есть где-то полный список по этой функции?
В IBM :). То что выложил — компиляция из разных источников и "научный тык". Баловался со скриптом, похожим на вышеприведённый, только где-то до 5000, дальше заленился. Всё интересное/полезное привёл, остальное либо нули, либо не поддаётся интерпретации.
 

hosm

* so what *
18.05.2009
2 442
6
#17
не думаю, что полный=)
ссылку взяла с форума интертраста, кто-то из форумчан недавно давал ссылку на тот топик.
Ссылку записала в codebase - есть там тема про недокументированное.
Если что, ищите там... и дополняйте.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#18
в продолжение темы

( 14.07.2010 10:32:30 ) Взятие статистики...
( 14.07.2010 10:32:30 ) LS memory allocated: 13101224
( 14.07.2010 10:32:30 ) LS memory allocated from OS: 37971110
( 14.07.2010 10:32:30 ) LS blocks used: 166864
......море гомнокода.....
( 14.07.2010 10:36:27 ) LS memory allocated: 15339344
( 14.07.2010 10:36:27 ) LS memory allocated from OS: 42718374
( 14.07.2010 10:36:27 ) LS blocks used: 190524

как бы в трансе, должно же быть наоборот, а оно не только память не сьело а наоборот кучу освободило? :)
 
Y

Yakov

#19
Почему должно быть наоборот? По состоянию на 14.07.2010 10:36:27 потребление памяти увеличилось по сравнению с 14.07.2010 10:32:30.