On m'a déjà dit qu'un signe qu'une application a une fuite de mémoire est que kernel_task
a une grande empreinte mémoire, généralement de l'ordre du gigaoctet. Si une erreur kext
était à l'origine de cette utilisation de la mémoire, nous nous attendrions à voir un écart entre la mémoire allouée et celle qui devrait l'être, c'est à dire
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
retournerait autre chose que les mots 'Wired' et 'Name'.
Au cours de la rédaction de ma thèse, j'ai remarqué que la modification d'un pdf alors qu'il est ouvert dans Preview provoque souvent de mauvaises choses : parfois, l'utilisation de la mémoire de l'ordinateur est réduite. kernel_task
peut atteindre environ huit gigaoctets, voire plus. Si je tue l'aperçu, il revient à la normale, instantanément. . Donc, de toute évidence, quelque chose ne va pas - et Preview fait fuir la mémoire dans ces conditions.
Donc, ma question est la suivante : si I savoir qu'un processus a laissé échapper du bélier via une augmentation soudaine et inattendue de l'empreinte de kernel_task
pourquoi on ne peut pas OS X savoir que quelque chose a mal tourné. Si tuer Preview restaure ma disparition malloc()
la mémoire, pourquoi n'a pas Darwin fait la collecte des déchets automatiquement pour moi ?
Ai-je une mauvaise compréhension fondamentale du fonctionnement de la gestion de la mémoire ?
EDIT : (15/9/15)
Voici une démonstration de ce dont je parle. Tout d'abord, je remarque une utilisation élevée de la mémoire par kernel_task
(notez que l'aperçu est ouvert, juste visible en bas du moniteur d'activité, utilisant 333 Mio de RAM) :
En suivant les remarques utiles d'Ashley ci-dessous, découvrons combien chaque kext utilise :
$ kextstat | awk 'NR==1{ printf "%10s %s\n", $5, $6; } NR!=1{ printf "%10d %s\n", $5, $6; }' | sort -n
...
...
...
1249280 com.apple.driver.DspFuncLib
1769472 com.apple.nvidia.driver.NVDAGK100Hal
2629632 com.apple.nvidia.driver.NVDAResman
6184960 com.apple.driver.AirPort.Brcm4360
$
Donc, pas un montant énorme. Ma machine est équipée de GPU discrets et intégrés ; leurs pilotes n'utilisent que quelques MiB de RAM câblée. Selon mon intuition, supprimons Preview et regardons ce qui se passe au niveau de l'empreinte mémoire des éléments suivants kernel_task
:
L'aperçu a disparu, et l'empreinte mémoire du noyau a considérablement diminué. Il n'y a toujours aucune preuve d'un changement dans l'utilisation de kext : la sortie de la commande ci-dessus est inchangée.
Modifier : Bug signalé sous le n° 22701036. J'attends toujours une réponse d'apple. Il n'y a rien de particulièrement intéressant si vous inspectez le processus dans ActivityMonitor, mais peut-être que je rate quelque chose.