Le type de commutateurs strace que j'ai tendance à utiliser est le suivant.
strace -ffttT -p pid -o /tmp/strace.out
Un exemple de cela ressemblerait,
19:35:57.485493 mprotect(0x7f35e7472000, 16384, PROT_READ) = 0 <0.000037>
19:35:57.485599 mprotect(0x7f35e7692000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485697 mprotect(0x7f35e78b7000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485782 munmap(0x7f35e7896000, 129588) = 0 <0.000037>
19:35:57.485875 set_tid_address(0x7f35e78949d0) = 10730 <0.000029>
19:35:57.485960 set_robust_list(0x7f35e78949e0, 0x18) = 0 <0.000024>
19:35:57.486048 futex(0x7fff8f58628c, FUTEX_WAKE_PRIVATE, 1) = 0 <0.000025>
19:35:57.486131 futex(0x7fff8f58628c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f35e7894700) = -1 EAGAIN (Resource temporarily unavailable) <0.000024>
Vous voyez le décalage horaire sur le côté droit de l'appel système indiquant le temps qu'il a fallu pour passer d'un appel système à un autre.
Il vous rattrapera le décalage horaire entre les appels système. Ainsi, lorsque vous voyez qu'un appel système a un écart de quelques secondes avec le prochain appel système, il fait du bruit.
Une autre méthode consiste à le coredump avec gcore. Cependant, cela nécessite un peu d'expérience pour naviguer dans gdb.
Mais, si le thread est un thread du noyau, vous ne pouvez pas l'étirer ou le vider. Dans ce cas, nous devons utiliser quelque chose de plus complexe. Dans le noyau RHEL5, nous utilisons oprofile. Dans RHEL6, nous utilisons perf. Je préfère la perf à l'oprofile. Les données Perf peuvent être collectées avec un format de type graphique montrant l'appel système où le pourcentage maximum de CPU est utilisé.
Avec un test de perf, je vois ça.
38.06% swapper [kernel.kallsyms] [k] mwait_idle_with_hints ↑
29.45% swapper [kernel.kallsyms] [k] read_hpet
4.90% swapper [kernel.kallsyms] [k] acpi_os_read_port ▒
4.74% swapper [kernel.kallsyms] [k] hpet_next_event
Il montre la fonction du noyau où 38% du temps CPU est dépensé. Maintenant, nous pouvons vérifier la fonction et voir ce qu'elle fait et ce qu'elle est censée faire.
Avec quelques exemples, ce n'est pas si difficile.