The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как отловить ошибку в зависающей программе"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Как отловить ошибку в зависающей программе"  
Сообщение от zkrvova email(ok) on 22-Апр-08, 11:38 
Есть демон который слушает определённый порт, и если есть соединение то создаёт fork и опять ждёт.

Новосозданная программа общается с клиентом.

Так вот иногда програма зависает занимая всю процесорное время(что самое досадное).

Отловить это нереально, т.к. зависает гдето 1% программ. одновременно запущено гдето 200-300 копий. Т.е. в день гдето 1000 соединений происходит и в день гдето 10 зависшисших потоков.

Какже всётаки вычислить где ошибка?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как отловить ошибку в зависающей программе"  
Сообщение от angra (??) on 22-Апр-08, 16:33 
Самому в таком нужды не было, но я бы попробовал один из вариантов:
1. Разрешить core dump, убить нужный процесс одним из сигналов приводящих к core dump, запустить gdb с этим дампом и попытаться понять в чем дело
2. Поставить как можно больше диагностических сообщений в тело программы со сбросом в лог файл, причем каждый потомок должен либо писать в отдельный лог либо добавлять свой pid в каждое сообщение, имитировать большую нагрузку простейшим скриптом до тех пор пока не воспроизведем проблему, дальше смотреть сообщения от конкретного процесса.
3. Внимательно просмотреть весь код и найти в каком месте мы обрабатываем не все варианты внештатных ситуаций. Например код может читать данные с сокета, не проверяя, что они там есть через select/poll, или даже не проверяя действителен ли вообще хендлер. Данный способ исповедует философию netbsd - если что-то написано правильно, то оно работает.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Как отловить ошибку в зависающей программе"  
Сообщение от zkrvova email(ok) on 22-Апр-08, 23:41 
>Самому в таком нужды не было, но я бы попробовал один из
>вариантов:
>1. Разрешить core dump, убить нужный процесс одним из сигналов приводящих к
>core dump, запустить gdb с этим дампом и попытаться понять в
>чем дело

Как разрешить coredump и как в gdb просмотреть?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Как отловить ошибку в зависающей программе"  
Сообщение от phpcoder email(??) on 23-Апр-08, 09:42 
>>Самому в таком нужды не было, но я бы попробовал один из
>>вариантов:
>>1. Разрешить core dump, убить нужный процесс одним из сигналов приводящих к
>>core dump, запустить gdb с этим дампом и попытаться понять в
>>чем дело
>Как разрешить coredump

ulimit -c unlimited

>и как в gdb просмотреть?

gdb core

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Как отловить ошибку в зависающей программе"  
Сообщение от phpcoder email(??) on 23-Апр-08, 09:43 
>[оверквотинг удален]
>>>1. Разрешить core dump, убить нужный процесс одним из сигналов приводящих к
>>>core dump, запустить gdb с этим дампом и попытаться понять в
>>>чем дело
>>Как разрешить coredump
>
>ulimit -c unlimited
>
>>и как в gdb просмотреть?
>
>gdb core

P.S. Я тут в своё время собирал про gdb маленький конспектик: http://freesource.info/wiki/devel/gdb

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как отловить ошибку в зависающей программе"  
Сообщение от NuINu (??) on 22-Апр-08, 16:44 
>Какже всётаки вычислить где ошибка?

можно конечно исходный текст посмотреть,  и на глаз определить :)
можно использовать gdb, подключиться к зависшему процессу, и посмотреть что у него в мозгу.
конечно если демон не на интерпретируемом языке.

ну а так побольше отладки выводи и все.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Как отловить ошибку в зависающей программе"  
Сообщение от zkrvova email(ok) on 22-Апр-08, 23:42 
>>Какже всётаки вычислить где ошибка?
>
>можно конечно исходный текст посмотреть,  и на глаз определить :)
>можно использовать gdb, подключиться к зависшему процессу, и посмотреть что у него
>в мозгу.

Как подключиться gdb  к зависшей программе?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как отловить ошибку в зависающей программе"  
Сообщение от NuINu (??) on 23-Апр-08, 09:39 
>>>Какже всётаки вычислить где ошибка?
>>
>>можно конечно исходный текст посмотреть,  и на глаз определить :)
>>можно использовать gdb, подключиться к зависшему процессу, и посмотреть что у него
>>в мозгу.
>
>Как подключиться gdb  к зависшей программе?

попробуй так:
gdb <исполняемый файл> <PID>


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Как отловить ошибку в зависающей программе"  
Сообщение от NuINu (??) on 23-Апр-08, 09:42 
>>>>Какже всётаки вычислить где ошибка?
>>>
>>>можно конечно исходный текст посмотреть,  и на глаз определить :)
>>>можно использовать gdb, подключиться к зависшему процессу, и посмотреть что у него
>>>в мозгу.
>>
>>Как подключиться gdb  к зависшей программе?
>
>попробуй так:
>gdb <исполняемый файл> <PID>

а ну да, если надо еще можно оттудаже сгенерировать коре файл.
generate-core-file ttt.core

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Как отловить ошибку в зависающей программе"  
Сообщение от zkrvova email(ok) on 24-Апр-08, 17:40 
Спасибо всем, буду пробовать.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру