@noprof

Чем и как анализировать зависший процесс в Linux (mono, CPU 100%)?

Здравствуйте!
В общем коротко и по делу:

Есть некоторое клиент-серверное приложение написанное на C++
Серверная часть (.exe) запускается в под mono в linux

Периодически ни с того, ни с сего серверное приложение под моно выжирает все CPU.
Нам нужно понять, хоть какую-либо информацию получить что именно зацикливается, что происходит, для дальнейшего разбирательства и фикса этой проблемы.

В общем, хотел бы узнать о следующем:
  1. Кто какими средствами пользуется для поиска хотя бы какой-либо информации о том, что происходит в зависшем процессе по PID
  2. Какие приложения и для чего?
  3. Можете ли вы продемонстрировать примеры?
  4. Какие есть еще средства для анализа что делает приложение когда оно зависло (в плане сети, в плане использования диска, в плане какие вызовы вызываются, и т.п.)
  • Вопрос задан
  • 1349 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
1. gdb, strace
2. ?
3. Примеры: gdb:
$ pidof top
21259
$ gdb
GNU gdb (GDB) Fedora 7.5.1-42.fc18
...
(gdb) attach 21259
Attaching to process 21259
Reading symbols from /usr/bin/top...Reading symbols from /usr/bin/top...(no debugging symbols found)...done.
...
(gdb) bt
#0  0x0000003fd2ceb843 in __select_nocancel () from /lib64/libc.so.6
#1  0x00000000004033e7 in main ()
(gdb) up
#1  0x00000000004033e7 in main ()
(gdb) x/10i $pc
=> 0x4033e7 <main+3639>:        test   %eax,%eax
   0x4033e9 <main+3641>:        jle    0x403340 <main+3472>
   0x4033ef <main+3647>:        xor    %edi,%edi
   0x4033f1 <main+3649>:        callq  0x408840 <keyin>
   0x4033f6 <main+3654>:        cmp    $0x1b,%eax
   0x4033f9 <main+3657>:        mov    %eax,%ebx
   0x4033fb <main+3659>:        je     0x403340 <main+3472>
   0x403401 <main+3665>:        jg     0x40344e <main+3742>
   0x403403 <main+3667>:        test   %eax,%eax
   0x403405 <main+3669>:        je     0x403340 <main+3472>
(gdb)

Будет гораздо красивее, если в приложении есть отладочная информация.

strace:
$ strace -i -p 21259
Process 21259 attached
[      3fd2ceb843] select(1, [0], NULL, NULL, {2, 80709}) = 0 (Timeout)
...


-- посмотреть "какие вызовы вызываются".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы