• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

Как вычислить причины падения сервера

fedotxxl

Well-known member
09.11.2005
614
0
#1
Люди, кто сталкивался с проблемой - сервер периодически падает. Произвожу нагрузочное тестирование. Чаще работает даже при очень больших нагрузках, иногда падает и при маленьких. Считываю показатели по использованной памяти (lsi_info(50)) - каких-либо зависимостей не видно.
Какие идеи есть? Какая полезная информация хранится в логах обвала, кроме агента и баз, которые были открыты?
 

divankin

Senjor developer
13.08.2009
182
0
#2
Первая идея - попытаться вычислить, какой серверный агент не закончил свою работу, когда упал сервер.
Еще кажется, HTTP задачка на шестых серверах иногда роняла сервер.
Сервер вообще какой? Что на нем крутится?
 
A

Alexander (Criz)

#3
начните с файла nsd. Там всё должно быть.. Если не разберётесь, выкладывайте сюда, все вместе посмотрим...
 

fedotxxl

Well-known member
09.11.2005
614
0
#4
Divankin
Я знаю какой агент, какие базы используются. Проблема в том, что агент исполняет ОЧЕНЬ большой объем работ. Поэтому хотелось бы знать, на каком методе заваливается. + заваливается абсолютно периодически, нет особых закономерностей.

Alexander (Criz)
Ссылка на NSD
 

divankin

Senjor developer
13.08.2009
182
0
#5
Итак, мы знаем агент. (Кстати, а вы не думали разбить этот агент на несколько агентов, которые исполняют меньший объем работ?)
Следующий этап - определить метод. Для этого печатайте в начале и в конце каждого метода в лог.
Print GetThreadInfo(LSI_THREAD_PROC), "Start"
.
.
.
Print GetThreadInfo(LSI_THREAD_PROC), "End"
Когда вы определите метод, то убираете все старые принты, и ставите в этом методе после каждой строки принт.

Еще можно добавить информацию о текущем обрабатываемом документе. Тогда вы сможете понять на каком документе агент валится. Посмотреть на него внимательно.
Если это всегда один и тот же документ, то можете сделать закладку типа
If doc.UniversalID = "Унид найденного документа" Then
STop
End if
и пройти по шагам в дебагере.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#6
Разные точки падения обычно свидетельствуют о нехватке/утечке ресурсов. Таких, как память, хэндлы и т.п.
Приведённый лог говорит, что в данном случае падение произошло при поиске документа во вьюшке (getDocumentByKey). БД E:\DominoData2\mechel\edms\1_Common\od.nsf сервер скорее всего MskDev2. Подозрительно много открытых хэндлов для БД od.nsf и открытых документов в этой БД. Не пытаетесь ли Вы держать открытыми сразу много документов, например поместив их в массив или List? Ещё видно, что много документов с NoteID=1081790 и NoteID=1081794 открыты в контексте разных хэндлов БД od.nsf, что приводит к открытию нового хэндла для данного документа.

Ещё подозрительно такое сообщение
OpenLog Error: agent 'AWF.RequestExecutor.TriggerEvent' in 'mechel\edms\0_Service\AWF_EC.nsf' on 'CN=MskDev2/O=MechelDev' produced the message: Error 4270 on line 14 in
 

fedotxxl

Well-known member
09.11.2005
614
0
#7
TIA
Спасибо большое, прямо в точку!) Можно узнать, по каким строчкам вы все это выяснили?

По поводу ошибки - все под контролем, так и нада =).
 
A

Alexander (Criz)

#9
TIA
а где вы увидели что агент запущен из od.nsf в секции STACK FRAMES?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#10
ну че вы глупые вопросы задаете? сервер уже взломан, логи прочитаны, код исправлен ;)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#11
Alexander (Criz)
Смотря какой агент. Агент, приведший к падению скорее не в od.nsf, а в AWF_EC.nsf и да, это видно в STACK FRAMES.