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 ...
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.