Просмотр системных вызовов.
strace ls strace -c -p 1
Просмотр стека.
GNU Debugger(Основной unix отладчик).
yum install gdb
# pstack 1 #0 0x00007fe1fb6f3763 in __epoll_wait_nocancel () from /lib64/libc.so.6 #1 0x00007fe1fd761bbd in manager_loop () #2 0x00007fe1fd75906c in main ()
Чтобы увидеть переданные в функцию аргументы надо доустановить пакеты с отладочной информацией, а так же при наличии для самого приложения(при наличии).
yum install --enablerepo=base-debuginfo glibc-debuginfo
Есть нюанс,glibc-debuginfo и glibc-debuginfo-common должны быть одной версии c glibc, если эти пакеты ставятся е в один день с ОС, а позже часто приходится понижать их версию. Указываем версию glibc.
# rpm -qa | grep glibc glibc-devel-2.17-78.el7.i686 glibc-debuginfo-2.17-196.el7.x86_64 glibc-2.17-78.el7.x86_64 glibc-static-2.17-78.el7.x86_64 glibc-2.17-78.el7.i686 glibc-common-2.17-78.el7.x86_64 glibc-devel-2.17-78.el7.x86_64 glibc-debuginfo-common-2.17-196.el7.x86_64 glibc-headers-2.17-78.el7.x86_64
yum downgrade --enablerepo=base-debuginfo glibc-debuginfo-common-2.17-78.el7 glibc-debuginfo-2.17-78.el7
# pstack 1 #0 0x00007f1f1ae84763 in __epoll_wait_nocancel () at ../sysdeps/unix/syscall-template.S:81 #1 0x00007f1f1cef2bbd in manager_loop () #2 0x00007f1f1ceea06c in main ()
Показывает имя функиции и на какой строке исходного кода сейчас выполнение.
Посистема perf в ядре linux.
Запускется n ное кол-во раз в секунду, которое адаптивно подбирается в зависимости от нагрузки на ситему,perf сохраняет состояние запущенных процессов(и функции приложения и функции ядра) в RAM(статистика).
# yum install perf # perf top Samples: 3K of event 'cycles:ppp', Event count (approx.): 70830328312566 Overhead Shared Object Symbol 44,59% [kernel] [k] tick_nohz_restart 19,02% libglib-2.0.so.0.5000.3 [.] g_source_set_name_by_id 12,74% libc-2.24.so [.] _int_malloc 9,51% [kernel] [k] entry_SYSENTER_32 8,58% [kernel] [k] native_apic_mem_read 5,57% libmutter.so.0.0.0 [.] meta_wayland_compositor_paint_finished 0,00% i965_dri.so [.] _init 0,00% [kernel] [k] kallsyms_expand_symbol.constprop.6 0,00% [kernel] [k] format_decode 0,00% perf [.] __symbols__insert 0,00% perf [.] rb_next 0,00% libglib-2.0.so.0.5000.3 [.] g_mutex_lock 0,00% [kernel] [k] update_blocked_averages 0,00% [kernel] [k] module_get_kallsym 0,00% [kernel] [k] vsnprintf 0,00% perf [.] rb_insert_color 0,00% perf [.] hex2u64
Аналог strace
# [tim@localhost ~]$ sudo perf trace ls ? ( ? ): :3802/3802 ... [continued]: execve()) = 0 0.130 ( 0.006 ms): :3802/3802 brk( ) = 0xd2f000 0.130 ( 0.056 ms): :3802/3802 ... [continued]: mmap2()) = -1217335296 0.199 ( 0.013 ms): :3802/3802 access(filename: 0xb7735930, mode: R ) = -1 ENOENT No such file or directory
Так же может быть полезен perf stat.