• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы fedotxxl
  • Дата начала
F

fedotxxl

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

divankin

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

Alexander (Criz)

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

fedotxxl

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

Alexander (Criz)
 
D

divankin

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

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

TIA

Разные точки падения обычно свидетельствуют о нехватке/утечке ресурсов. Таких, как память, хэндлы и т.п.
Приведённый лог говорит, что в данном случае падение произошло при поиске документа во вьюшке (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
 
F

fedotxxl

TIA
Спасибо большое, прямо в точку!) Можно узнать, по каким строчкам вы все это выяснили?

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

Alexander (Criz)

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

Akupaka

ну че вы глупые вопросы задаете? сервер уже взломан, логи прочитаны, код исправлен ;)
 
T

TIA

Alexander (Criz)
Смотря какой агент. Агент, приведший к падению скорее не в od.nsf, а в AWF_EC.nsf и да, это видно в STACK FRAMES.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!