[linux] strace -o bestand programma
Paul Slootman
paul+nospam op wurtel.net
Vr Dec 4 17:53:07 CET 2020
On Fri 04 Dec 2020, Daniel C. von Asmuth wrote:
> > >> > > > > Een manier om zoiets te onderzoeken is met het volgende commando:
> > >> > > > >
> > >> > > > > strace -T -o trace.txt vlc
Ik zou er -f bijzetten, dan zie je ook alle threads en evt. geforkte
processen.
> clone(child_stack=0x7fbe9980bf30, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tid=[21305], tls=0x7fbe9980c700, child_tidptr=0x7fbe9980c9d0) = 21305 <0.000028>
> rt_sigprocmask(SIG_SETMASK, [HUP INT QUIT PIPE TERM CHLD], NULL, 8) = 0 <0.000004>
> futex(0x7fbe9c2840a0, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY) = 0 <25.521139>
> futex(0x560d7c737f98, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000011>
> rt_sigprocmask(SIG_SETMASK, [HUP INT QUIT PIPE TERM], NULL, 8) = 0 <0.000022>
> rt_sigaction(SIGHUP, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 <0.000060>
> rt_sigtimedwait([HUP INT QUIT TERM], {si_signo=SIGINT, si_code=SI_KERNEL}, NULL, 8) = 2 (SIGINT) <152.944456>
> rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[INT], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7fbe9f8d2210}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 <0.000037>
> rt_sigaction(SIGALRM, {sa_handler=0x560d7c67c980, sa_mask=[ALRM], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7fbe9f8d2210}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 <0.000104>
> rt_sigprocmask(SIG_UNBLOCK, [INT ALRM], NULL, 8) = 0 <0.000027>
> alarm(3) = 0 <0.000018>
> getpid() = 21299 <0.000016>
> tgkill(21299, 21299, SIGTERM) = 0 <0.000019>
>
> In bovenstaande zie je de enige twee system calls die veel tijd kostten. De laatste bijna
> 153 seconden - ik neem aan dat dat Harry's <Ctrl-C> was (gerekend vanaf het opstarten
> van het programma). Het programma stopt niet onmiddellijk, maar sluit daarna snel af.
>
> Daarvoor gebeurt iets verdachts: een futex system call die de aanroepende thread
> ruim 25 seconden liet wachten. Het adres 0x7fbe9c2840a0 komt verder nergens in
> de trace voor, dus veel wijzer maakt dat ons niet. Het bevestigt in ieder geval
Hoogstewaarschijnlijk omdat een andere thread iets aan het doen is, wat
weten we nu niet. Daar worden zulke futex'en ook voor gebruikt: om
threads te synchroniseren.
Paul
Meer informatie over de Linux
maillijst