4 votes

L'athlète laisse de nombreuses prises ouvertes

Cela ressemble en quelque sorte à cette question . Alors que je diagnostiquais un comportement bizarre d'une application sur mon MacBook Pro et les redoutables erreurs "too many open files" apparaissant dans le shell de façon inattendue, j'ai découvert que ath un composant exécutable de AirTrafficHost.framework conserve un nombre important de prises ouvertes dans CLOSE_WAIT l'état. Le nombre tend à augmenter avec le temps jusqu'à atteindre la limite du système pour les descripteurs de fichiers ouverts. J'utilise mon MBP sur une station d'accueil la plupart du temps et il est toujours allumé, donc la limite est atteinte après quelques jours.

AirTrafficHost.framework est un cadre privé d'Apple et semble faire partie de la communication sans fil avec les appareils iOS. Il y a deux appareils iOS pour lesquels j'ai activé la synchronisation réseau - un iPad Pro et un iPhone. Il semble que ath essaie de leur parler et à un moment donné, la connexion est interrompue, mais les sockets réseau ne sont jamais fermés et continuent de s'accumuler. lsof montre :

ath  627 hristo   7u  IPv6 0x2e106590d5ff22b3  0t0  TCP [fe80:5::xxx]:49280->[fe80:5::yyy]:57461 (CLOSE_WAIT)
ath  627 hristo   8u  IPv6 0x2e106590d6aea413  0t0  TCP [fe80:5::xxx]:49300->[fe80:5::yyy]:57464 (CLOSE_WAIT)
ath  627 hristo  10u  IPv6 0x2e106590d7a65c93  0t0  TCP [fe80:5::xxx]:49529->[fe80:5::yyy]:57482 (CLOSE_WAIT)
ath  627 hristo  11u  IPv6 0x2e106590d4fe9a33  0t0  TCP [fe80:5::xxx]:49574->[fe80:5::yyy]:57486 (CLOSE_WAIT)
ath  627 hristo  13u  IPv6 0x2e106590d5feeb93  0t0  TCP [fe80:5::xxx]:49609->[fe80:5::yyy]:57490 (CLOSE_WAIT)
ath  627 hristo  14u  IPv6 0x2e106590d18e7b93  0t0  TCP [fe80:5::xxx]:49656->[fe80:5::yyy]:57494 (CLOSE_WAIT)
... many more ...

Actuellement, cela fait 5 heures depuis le dernier redémarrage et le nombre de descripteurs de socket est déjà de 162 en deux. ath (un pour chaque appareil iOS, je suppose) et ne cesse de croître :

$ lsof -n | grep ^ath | grep TCP | wc -l
    162

Il semble également que pour chaque déconnexion, il y ait une entrée dans le fichier /var/log/system.log :

Mar 17 01:15:23 MacBook-Pro AMPDeviceDiscoveryAgent[433]: Entered:_AMMuxedDeviceDisconnected, mux-device:159
Mar 17 01:15:23 MacBook-Pro AMPDeviceDiscoveryAgent[433]: Entered:__thr_AMMuxedDeviceDisconnected, mux-device:159
Mar 17 01:15:23 MacBook-Pro AMPDeviceDiscoveryAgent[433]: tid:7387 - Mux ID not found in mapping dictionary
Mar 17 01:15:23 MacBook-Pro AMPDeviceDiscoveryAgent[433]: tid:7387 - Can't handle disconnect with invalid ecid

Le système d'exploitation est un MacOS Catalina 10.15.3 entièrement mis à jour.

Quelqu'un d'autre rencontre-t-il le même problème et connaissez-vous une solution qui n'implique pas d'augmenter les limites du système ou d'effectuer une installation propre du système d'exploitation ? J'ai déjà un launchd emploi pour augmenter kern.maxfiles y kern.maxfilesperproc mais ce n'est pas vraiment une solution - cela ne fait que repousser le problème. Et je préférerais ne pas désactiver la synchronisation réseau, car je n'ai plus de ports USB.

1voto

Jose Chavez Points 645

Il n'y a pas de problème à augmenter les limites du système - par exemple jusqu'à 65536 fichiers ouverts. 162 sockets sur 5 heures est un nombre relativement faible. Il ne va pas affecter les performances du système de quelque manière que ce soit, et n'utilise pas de ressources importantes.

Normalement, les sockets finissent par disparaître d'eux-mêmes après un délai d'attente. Cependant, dans votre cas, elles sont listées comme étant dans l'état CLOSE_WAIT. Cela signifie que le noyau attend que l'application appelle close() sur le descripteur de socket, et qu'elles ne disparaîtront pas automatiquement.

ath est censé faire exactement cela - il semble donc que vous ayez rencontré un bogue, ou que vous ayez une sorte de mauvaise configuration sérieuse qui fait que l'option ath se comporter de manière incorrecte.

En guise de mesure temporaire, vous pouvez fermer les sockets en fermant le fichier ath processus. Vous pouvez voir l'ID du processus dans votre sortie de lsof, et ensuite utiliser la fonction kill pour le fermer. Vous pouvez le relancer à partir de :

/System/Library/PrivateFrameworks/AirTrafficHost.framework/ath

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X