10 votes

Comment empêcher mDNSResponder d'utiliser 90-100% du CPU en permanence sur Catalina ?

Je viens de mettre à jour mon MacBook Pro 15" 2018 de Mojave à Catalina (10.15.4). Cela fait quelques heures.

L'une des premières choses que j'ai faites après la mise à jour a été de monter une vidéo à l'aide de la nouvelle version d'évaluation gratuite de Final Cut Pro X. Les ventilateurs de refroidissement de mon ordinateur portable ont tourné à plein régime pendant toute la durée de la mise à jour, mais il y avait toujours un rendu en arrière-plan en cours, alors je me suis dit que c'était normal.

Lorsque j'ai terminé et quitté FCP, les ventilateurs ne tournaient pas, j'ai donc vérifié le moniteur d'activité et j'ai découvert que mDNSResponder prenait 90 à 100 % du CPU en permanence. La colonne Threads dans Activity Monitor indique 3-4 threads la plupart du temps ; les 100% sont répartis sur tous ces threads, et ils ne sont pas tous sur le même cœur. Je ne sais pas comment il parvient à faire cela tout en restant à 100% ou juste en dessous la plupart du temps, mais c'est ce qu'il fait.

screenshot of Activity Monitor

L'ordinateur portable possède six cœurs (12 logiques), de sorte que l'occupation complète d'un cœur n'entraîne pas de différence notable en termes de performances (à moins que je ne commence à mesurer le temps que prennent les choses - mais cela revient à remarquer que les chiffres sont différents - et non que les performances sont différentes !)

Note : Dans l'ensemble, les graphiques à barres montrent que plus d'un cœur complet est utilisé. C'est normal. J'ai une recherche appliquée dans ma capture d'écran Activity Monitor, et il y a beaucoup d'autres choses en cours - Slack est ouvert, Chrome avec onze milliards d'onglets, IntelliJ IDEA est probablement en train d'indexer quelque chose, et ainsi de suite.

J'ai essayé de redémarrer mDNSResponder en utilisant ces commandes :

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

J'ai vu le processus disparaître, donc je sais que la commande a fonctionné, mais l'utilisation du processeur est immédiatement revenue à 100 % lorsque j'ai redémarré. mDNSResponderHelper ne s'est pas arrêtée, j'ai donc réessayé, en insérant des sudo killall mDNSResponderHelper comme étape intermédiaire. Cela a permis aux deux processus de disparaître comme je l'avais prévu, mais le problème n'a toujours pas été résolu.

J'ai également essayé d'envoyer un signal HUP à mDNSResponder comme suit :

sudo killall -HUP mDNSResponder

Cela n'a pas eu d'effet non plus.

J'ai ouvert Console, entré mdnsresponder dans le champ de recherche, et a regardé les messages défiler pendant une minute ou deux. Quelques informations sur Bonjour, BEAUCOUP de <private> et un enregistrement des requêtes DNS d'apparence assez normale. J'ai essayé de désactiver le Bluetooth et le Wifi dans l'espoir d'affecter Bonjour, mais je suis sur une connexion Ethernet câblée (que je n'ai pas déconnectée) et cela n'a pas semblé avoir d'effet.

Après avoir tapé ceci, j'ai finalement remarqué que cloudphotosd prenait également une bonne partie du CPU. J'ai supposé qu'il s'agissait du fameux processus de réindexation qui se produit fréquemment après les mises à jour du système d'exploitation, parcourant ma photothèque (assez volumineuse), mettant à jour les métadonnées en fonction des nouvelles fonctionnalités offertes par Catalina, et téléchargeant ces changements vers iCloud. Cela expliquerait une activité réseau constante, et j'ai donc pensé que cela pourrait peut-être expliquer l'activité de mDNSResponder. J'ai donc laissé cette fenêtre ouverte sans la soumettre et j'ai attendu un peu pour voir si cloudphotosd se calmerait. Il s'est calmé, mais pas mDNSResponder. Voilà pour mon intuition !

Finalement, j'ai essayé de redémarrer mon Mac ; mDNSResponder n'a pas perdu de temps pour se remettre au travail. Sans aucune application en cours d'exécution après un nouveau démarrage, il était déjà constamment à 100 % ou juste en dessous, comme avant.

Il s'agit d'un site de questions-réponses, et je n'ai pas posé de question, alors j'en pose une : comment savoir ce qu'il fait, et comment le faire cesser ?

MISE À JOUR : cela fait près de 48 heures et il continue de tourner. L'autonomie de ma batterie est maintenant nulle. J'ai observé que le fait de fermer le couvercle de l'ordinateur portable semble l'arrêter, mais qu'il revient dès que je l'ouvre à nouveau. J'ai également remarqué un autre symptôme : les premières recherches DNS après un redémarrage prennent ~2 secondes (je m'attendais à <200ms). Je ne sais pas si c'est simplement un effet secondaire du fait que mDNSResponder est si occupé à faire ce qu'il fait ou si c'est lié à la cause.

MISE A JOUR 2 : cela fait plus de trois semaines. J'ai ajouté une prime de 100 points. Le délai de consultation du DNS a augmenté ; il prend souvent 20 à 30 secondes, et bien qu'il semble y avoir une certaine mise en cache en place, je pense qu'elle a une expiration basée sur le temps, parce que le délai se reproduit plus tard sans redémarrage. Je suis heureux de pouvoir interagir directement avec quelqu'un d'assez compétent pour déboguer et diagnostiquer ce problème. Je suis à l'heure d'été de l'Est aux États-Unis (UTC-4) et je suis généralement disponible pendant les heures de bureau.

3voto

Harv Points 6277

Voici ma recommandation :

  1. Voyons ce que mDNSResponder est en train de faire . Voici un utilitaire qui permet d'activer/désactiver la censure derrière l'interface utilisateur. <private> étiquette. Veillez à le rallumer une fois que vous avez terminé. Il se peut que le processus soit bloqué par quelque chose et qu'il tourne en boucle, ou quelque chose de ce genre. https://georgegarside.com/blog/MacOS/sierra-console-private/

  2. Obtenez une capture de paquets de votre réseau lorsque vous effectuez une requête DNS. Saisir Wireshark Pour cela, lancez une capture sur l'interface que vous utilisez (qu'elle soit Ethernet ou WiFi ; mais assurez-vous que celle(s) que vous n'utilisez pas est (sont) éteinte(s) ou débranchée(s)). Je ferais cela d'abord dans un environnement où il faut 20 à 30 secondes, puis après un redémarrage lorsque les conditions sont telles qu'il ne faut plus que 2 à 3 secondes. Le moins vous pouvez utiliser le réseau, le mieux c'est de faire ces captures de paquets, car ils deviendront vite volumineux. Cela devrait nous montrer les requêtes DNS ainsi que les requêtes vers et depuis les sites web eux-mêmes, afin que nous puissions voir où se situent les retards. S'il n'y a pas de retards dans le réseau, nous devrions plutôt regarder du côté des processus.

  3. Téléchargez les parties pertinentes des journaux et/ou les captures de paquets quelque part pour que nous puissions les consulter. Veillez à censurer ou à supprimer toute donnée privée.

  4. Enfin, notez que ce problème peut être résolu plus rapidement en procédant à une réinstallation du système d'exploitation. Cela peut s'opposer à votre point de vue sur les pouvoir pour réparer votre équipement, savoir ce qui se passe avec votre équipement, etc., mais si l'objectif est de ramener mDNSResolver à la normale le plus rapidement possible, une réinstallation du système d'exploitation sur place peut est le moyen le plus rapide d'y parvenir.

EDIT : J'ai pu recréer le problème et capturer le trafic réseau correspondant. De nombreuses sections de RFC 6762 (DNS multicast) semblent pertinentes - je ne publierai pas d'extraits ici, mais j'ai trouvé que certaines parties des sections 3, 5, 5.2 et 10.2 étaient très pertinentes.

Voici ce que je pense qu'il se passe.

Lors de la création de ces alias lo0, le trafic est constamment généré avec un drapeau "cache flush". Le RFC n'entre pas suffisamment dans les détails pour que je puisse en être sûr, mais il semble que chacune des adresses loopback s'annonce comme étant les Les appareils qui écoutent doivent donc vider leurs caches internes et les mettre à jour avec la nouvelle adresse IP.

Pensez-y, si le réseau pense que vous êtes hostname.local à 192.168.44.111 et que votre adresse IP change, mDNS enverra un message "flush your caches", hostname.local est maintenant 192.168.44.123 !" sur le site 224.0.0.251 . C'est l'une des circonstances dans lesquelles mDNS annonce de manière proactive une nouvelle IP, et c'est la raison pour laquelle la navigation en réseau fonctionne si bien - c'est-à-dire les imprimantes en réseau, conformément au RFC.

Ce qui n'a pas beaucoup de sens pour moi, c'est qu'il y a des parties du RFC qui me font penser que plusieurs adresses loopback actives sur la même machine ne pourraient pas spammer comme elles le font - mais il se peut que je ne comprenne pas bien le RFC. Quoi qu'il en soit, il me semble clair que le mDNSResponder Le processus passe en boucle par chaque interface de bouclage et dit à tout le monde sur le site de la 224.0.0.251 de ne pas tenir compte de la dernière personne qui a pris les choses en main, cette est la nouvelle adresse IP attribuée à mon nom d'hôte !

Je ne comprends pas très bien pourquoi cela ralentit les requêtes DNS normales, sauf si mDNSResponder est responsable de l'envoi et de la réception des requêtes DNS régulières, mais elle est liée à toutes ces absurdités avec les autres interfaces. Et/ou, peut-être que les requêtes DNS seraient envoyées et reçues par l'interface qui a le plus récemment pris en charge le nom d'hôte. Cela pourrait vraiment causer des retards, car le temps qu'une requête DNS sur le WAN revienne, l'interface de bouclage qui répondrait serait différente de celle d'où elle est partie. Mais je ne fais que spéculer à ce stade.

De plus, au lieu de devoir redémarrer, vous pouvez modifier légèrement votre script. Si vous ifconfig lo0 alias "$ADDR" up a été utilisé pour faire apparaître un nouvel alias d'interface, puis ifconfig lo0 -alias "$ADDR" peut être utilisé pour le réduire.

-2voto

mmmaus Points 19

Il peut s'agir de beaucoup de choses, mais toutes impliquent le partage à distance via l'internet.

Le partage d'écran, la connexion à distance, la gestion à distance, le partage Bluetooth ou même Bonjour sont-ils activés ?

L'une de ces choses pourrait être à l'origine de tout ce trafic DNS.

D'autre part, il peut s'agir d'un logiciel malveillant. Essayez de nettoyer votre cache DNS et changez-le en 0.0.0.0

Pour vider le cache DNS :

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

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