Comment enquêter sur l'utilisation élevée de la mémoire des tâches du noyau?

131

J'utilisais mon MBP (avec 16 Go de RAM) comme d'habitude et en bleu, j'ai ce popup qui:

Votre système n'a plus de mémoire d'application.

Pour éviter les problèmes avec votre ordinateur, fermez toutes les applications que vous n'utilisez pas.

Forcer à quitter des applications - Votre système n'a plus de mémoire d'application - capture d'écran

J'ai évidemment fermé quelques-uns que je pouvais, mais cela n'a pas aidé.

Après vérification de la mémoire, il semble que la tâche du noyau ait consommé 7 Go et que la mémoire d’échange de 22,36 Go ait été utilisée pour un total de 23 Go (ce qui était évidemment le cas). Cependant, j'ai encore 20 Go d'espace libre sur mon SDD.

Mémoire - Menus iStat - capture d'écran

Moniteur d'activité n'a pas beaucoup aidé pendant que mon OS X se dirigeait vers la destruction.

Explorateur de processus

kernel_task - Onglet Mémoire - Capture d'écran kernel_task - Onglet Statistiques - Capture d'écran

Mes topstatistiques avant le gel du noyau:

Processes: 344 total, 2 running, 5 stuck, 337 sleeping, 2580 threads                                                                                                                         19:23:56
Load Avg: 1.56, 1.62, 2.09  CPU usage: 3.51% user, 8.47% sys, 88.1% idle   SharedLibs: 46M resident, 0B data, 6572K linkedit. MemRegions: 757970 total, 2139M resident, 56M private, 907M shared.
PhysMem: 9410M used (6198M wired), 556M unused. VM: 1155G vsize, 1311M framework vsize, 112872658(320) swapins, 122668389(0) swapouts. Networks: packets: 299419263/363G in, 142126838/14G out.
Disks: 58970173/1079G read, 20012389/1120G written.

À la fin de mon OS X gelé et je devais faire une réinitialisation matérielle, réparer mon SDD en mode de récupération et de réparation après (récupérer le travail perdu, la résolution des conflits d'application, la vérification de mon dossier perdu + trouvé, les onglets Chrome / Terminal ont disparu, maux de tête, etc. )

Ma question est la suivante: comment vérifier l'utilisation intensive de la mémoire par les tâches du noyau ou comment gérer correctement ce type de situation? J'ai essayé de prendre Sample avec Activity Monitor, mais en gris.


Détails de mon MBR: Intel Core i7 à 2,3 GHz (fin 2013) avec 16 Go de RAM. OS X: 10.9.5

Kenorb
la source
1
@klanomath D'habitude, j'ai beaucoup de gels, surtout avec un temps de disponibilité long, et ce ne sont que des gels du noyau pour une raison inconnue (mon MBR est assez récent). Mais c’est la première fois que j’ai vu que je manquais de mémoire (avec 16 Go de RAM et 50 Go d’espace libre). Cependant, ma principale question est de savoir comment étudier l'utilisation de la mémoire par la tâche du noyau. Par conséquent, si elle est reproductible, elle ne devrait pas être pertinente.
Kenorb
5
Utilisez zprint -t(Lion) ou sudo zprint -t(Lion de montagne et plus tard).
klanomath
1
Vous avez raison de dire que la reproductibilité de votre question dans le titre n'est pas pertinente, mais il pourrait être pertinent de résoudre votre (vos) problème (s).
Klanomath
1
Souhaitez-vous ajouter le résultat à votre question (ou l'enregistrer dans vos documents)? Juste pour référence future / pour pouvoir le comparer à un zprint créé dans un état système plus critique. IMHO c'est une fuite de malchance. Si vous postez cela, je pourrai peut-être vous en dire plus.
klanomath
1
J'ai le même problème tout d'un coup. Je suis sûr que c'est lié à docker pour mac ou hyperkit. Dès que j'arrête docker pour mac, kernal_task commence à manger plus de 10 Go de mémoire
Charlie Martin le

Réponses:

176

Il y a beaucoup de choses qui ne vont pas avec une utilisation élevée des tâches du noyau. En règle générale, cela est lié à un processus défectueux ou lourd qui entraîne une utilisation excessive des ressources système (telles que l'indexation du stockage, l'exécution de machines virtuelles, un trop grand nombre d'onglets dans le navigateur Web ou certains autres processus d'arrière-plan).

Voici quelques méthodes qui aident à étudier les problèmes d'utilisation du noyau OS X:

Méthodes de base

  • Exécuter Console.appet vérifier " Tous les messages " pour voir si quelque chose d'inhabituel se produit actuellement.
  • Utilisez Activity Monitor pour lire la mémoire système et déterminer la quantité d’UC, de RAM et de disque utilisée.

    Sinon, exécutez topdans Terminal et maintenez Spacepour rafraîchir - il est plus facile de trouver le problème ( swapins / swapouts / disks ?).

  • Exécutersudo fs_usage dans Terminal pour signaler les appels système et les erreurs de page liés à l’activité du système de fichiers en temps réel (je pense que c’est la meilleure option parmi toutes les autres). Puis appuyez sur Control- Cpour l'arrêter.

    Action: envisagez de supprimer les applications qui apparaissent fréquemment dans la liste, mais que vous ne les utilisez pas.

    Pour en savoir plus, consultez : Comment déboguer un processus «kernel_task» hors de contrôle?

  • Exécutersudo syscallbypid.d (ou syscallbyproc.d), attendez un peu, appuyez sur Control- C. Maintenant, vérifiez quel processus a généré le plus grand nombre d’appels système pendant cette période (dernière colonne) et si vous le reconnaissez, envisagez de le supprimer. Sinon, recherchez-le sur Google et apprenez-en plus.

Méthodes avancées

  • Utilisez la sysdiagnosecommande (peut être déclenchée en appuyant sur Shift- Control- - - .(période) pour collecter rapidement des informations de diagnostic à l’échelle du système, utiles pour la recherche des problèmes de mémoire / de performances du système (qui apparaîtront dans /var/tmp), que ce soit par vous ou par Apple. Pendant l’analyse, essayez de ne pas le faire. quoi que ce soit, une fois terminé - envisagez de décompresser le fichier généré et analysez les journaux.

    Voir: Comment obtenir des fichiers de diagnostic système sous OS X?

  • Exécuter footprintpour collecter des informations de mémoire détaillées sur un niveau de type par région de machine virtuelle et sur des octets permutés:

    sudo footprint -a
    

    Ancienne version:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • Utilisé spindumppour profiler tout le système, il va générer un /tmp/spindump.txtfichier (incluant le noyau et ses extensions).

  • Utilisez vm_statpour afficher les statistiques de la mémoire virtuelle. Par exemple

    vm_stat 1 # to display every second.
    
  • Utilisez zprintpour vérifier les informations sur l'utilisation du noyau, c'est possible par:

    sudo zprint -t -s | head -n20
    

    Il montrera les zones de noyau les plus gaspillantes.

  • Utilisez newproc.dpour surveiller les nouveaux processus au fur et à mesure de leur exécution, creatbyproc.dpour les fichiers:

    sudo newproc.d
    sudo creatbyproc.d
    

    Remarque: Sous OS X plus récent (10.11 ou supérieur), cela peut ne pas fonctionner lorsque la protection de l'intégrité est activée (vérifier par csrutil status).

  • Try sar- Journal d'activité du système qui peut échantillonner et signaler différents compteurs de statistiques cumulées gérés par le système d'exploitation.

Pour des outils de débogage plus utiles, recherchez les scripts dtrace ( grep dtrace /usr/bin/*). Si vous connaissez le processus défectueux à l'origine du problème, vous pouvez le dtrussdéboguer.


Actions

Voici quelques suggestions qui peuvent vous aider à résoudre les problèmes liés au système d’exploitation.

  • Libérez de la mémoire inactive. Pour ce faire, vous devez d'abord vider le cache et forcer le cache sur disque à être purgé:

    sync && sudo purge
    

    sync - forcer l'achèvement des écritures en attente sur le disque (cache vider)

    purge - forcer le cache disque à être purgé (vidé et vidé)

    Sa fonction consiste essentiellement à mettre fin à toutes les opérations en attente d'E / S utilisant le cache disque, puis à libérer tout le cache disque occupé. Il doit donc libérer de l'espace disque pour faciliter la pagination et la permutation de la mémoire principale. Son utilisation est sûre car elle n'affecte pas la mémoire anonyme allouée via malloc, vm_allocate, etc.

  • Utilisez des applications tierces pour éliminer une partie de la mémoire utilisée, telle que iBoostUp , SystemPal , etc.

  • Vous pouvez également désactiver Spotlight temporaire:

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist 
    

    Et considérez d'autres services par:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • Quittez votre navigateur Web et vérifiez si cela vous aide. Par exemple, l'utilisation de Chrome est très astucieuse, notamment lorsqu'un traitement frontal est effectué en arrière-plan (par exemple, Javascript) ou que des animations de type publicitaire rendent constamment le contenu.

Kenorb
la source
1
Spotlight ne cesse de réapparaître, mais je ne l'utilise pas et chaque fois que je le tue, il réapparaît une seconde après ... Comment puis-je m'en débarrasser?
ling
1
@ling, je vous suggérerais alors de poser une autre question, car elle est liée à une mémoire de tâches du noyau élevée, et non à une tâche spécifique de Spotlight.
Kenorb
2
soupir j'ai 4 Go de RAM sur mon mac, et tout récemment, la tâche du noyau montait à 3,1 Go, ce qui bloquait tout mon ordinateur. Fermé mon onglet Google Drive, et il est descendu à 950 Mo ...
Zizouz212
3
Pas assez spécifique pour résoudre réellement le problème d' kernel_taskutilisation de mémoire haute et de processeur.
hyiltiz
6

J'ai eu un problème très similaire après avoir remplacé mon écran LCD sur un iMac de la fin de 2012. Le ventilateur fonctionnait à un régime élevé et utilisait beaucoup de ressources Kernel_task. Je l'ai réduit à un capteur de température que vous devez déplacer de l'ancien écran LCD au nouvel écran de remplacement. Si vous oubliez de le faire, la vitesse du processeur et Kernel_task sont affectés, ce qui ralentit votre système.

fougère10
la source