web-dev-qa-db-fra.com

Débogage des délais de connexion à l'aide de la strace?

J'essaie de comprendre pourquoi Eclipse Spinning, alors j'ai décidé de tirer de la rythme.

J'ai trouvé le processus Eclipse en utilisant:

$ ps ax | grep Java
 5546 ?        Sl    19:04 /usr/bin/Java ... [arguments omitted]

En exécutant strace sur ce processus, je vois que cela attend un autre processus:

$ Sudo strace -p 5546
Process 5546 attached - interrupt to quit
futex(0x7f6c416679d0, FUTEX_WAIT, 5547, NULL^C <unfinished ...>
Process 5546 detached

Fait intéressant, le processus 5547 n'apparaît pas dans ps (quelqu'un peut-il me dire pourquoi?), Mais je peux strace it. Il crit à plusieurs reprises beaucoup de défaillances aigologiques (avec le succès occasionnel)

read(16, 0x7f6c41664d10, 16)            = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(15, 0x7f6c3815f2e4, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {67410, 357843264}) = 0
poll([{fd=16, events=POLLIN}, {fd=15, events=POLLIN}, {fd=68, events=POLLIN}, {fd=128, events=POLLIN}, {fd=69, events=POLLIN}], 5, 0) = 0 (Timeout)
read(16, 0x7f6c41664cb0, 16)            = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(15, 0x7f6c3815f2e4, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
...

Juger de la sortie, on dirait qu'il sonne l'interrogation des descripteurs de fichier 16, 15, 68, 128 et 69. En particulier, les erreurs EAGAIN proviennent de FDS 15 et 6, comme le montre read(2) et recvfrom(2) appelle.

Comment trouver plus d'informations sur ces FDS? J'ai essayé lsof -p 5547 Mais aucune sortie n'est imprimée. Je soupçonne que ce sont des sockets qui sont ouverts à un site Web, mais pourquoi il tourne dans une boucle serrée avec EAGAIN défaillances est intriguée ...

6
jabalsad

Le troisième paramètre à futex(2) n'est pas nécessairement un ID de processus, le manuel dit qu'il est futex(uaddr, op, val, timeout, ...), et que si OP est FUTEX_WAIT, il vérifie atomique que l'adresse Futex ADDR contient toujours la valeur val et dort en attente de Futex_wake sur cette adresse FUTEX. [Quand] --délai d'attente est null, l'appel bloque indéfiniment. "

Dans votre cas, on dirait que le processus 5546 était assis là-bas attendant quelque chose - vraisemblablement son fil 5547 ou quelque chose de lié, mais nous ne pouvons pas savoir exactement ce que vous êtes sûr sur cette base - pour écrire ce numéro à la mémoire spécifiée. adresse.

Notez également que vous pouvez voir des threads en utilisant ps -eLf ou similaire.

2
Josip Rodin