On m'a dit précédemment que certaines applications présentaient une fuite de mémoire, à savoir kernel_task
une empreinte mémoire importante, généralement de l'ordre du gigaoctet. Si un problème apparaissait kext
causait cette utilisation de la mémoire, nous nous attendrions à voir une différence entre la mémoire allouée et celles qui devraient être allouées, c'est-à-dire
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
renverrait autre chose que les mots "Wired" et "Name".
Lors de la rédaction de ma thèse, j’ai constaté que le fait de modifier un fichier PDF pendant qu’il est ouvert dans Preview entraînait souvent de graves problèmes: parfois, l’utilisation de la mémoire kernel_task
peut atteindre environ huit gigaoctets, voire davantage. Si je tue l'aperçu, il revient instantanément à la normale . Il est donc évident que quelque chose ne va pas - et Preview perd de la mémoire dans ces conditions.
Ma question est donc la suivante: si je sais qu’un processus a perdu de sa vigueur grâce à une augmentation soudaine et inattendue de l’empreinte de kernel_task
, pourquoi OS X ne peut-il pas savoir que quelque chose ne va pas. Si kill Preview restaure ma malloc()
mémoire manquante , pourquoi Darwin ne collecte- t- il pas automatiquement les ordures pour moi?
Ai-je un malentendu fondamental sur le 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 importante de la mémoire par kernel_task
(remarque, l’aperçu est ouvert, mais visible au bas de Activity Monitor, avec 333 Mio de RAM):
Après les remarques utiles de Ashley ci-dessous, voyons 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 beaucoup. Ma machine a des GPU discrets et intégrés. leurs conducteurs utilisent seulement quelques Mo de RAM câblé. Sur mon intuition, éliminons Preview et voyons ce qu'il advient de l'empreinte mémoire de kernel_task
:
La prévisualisation a disparu et l'encombrement mémoire du noyau a considérablement diminué. Il n'y a toujours aucune preuve d'un changement dans l'utilisation de kext: le résultat de la commande ci-dessus reste inchangé.
Edit : 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 il me manque peut-être quelque chose.
kextstat
. Je crois comprendre que si un kext fuit, les octets alloués et ceux que le noyau sait sont attribués sera différent. Dans ce cas, j'ai mis cela là pour montrer que je n'ai pas de kext qui fuit - donc, 2) cela ne se produit pas lorsque Preview mange du ram. Au lieu de cela, kernel_task
grandit beaucoup. Je vais essayer de recréer ce problème et de prendre une photo :-).
diff
commande compare les colonnesSize
etWired
de lakextstat
sortie. Je conviens qu’ilSize
s’agit de "mémoire allouée", mais je ne pense pas qu’elleWired
soit "censée être allouée" (laman kextstat
décrit comme "le nombre d’octets câblés de la mémoire du noyau occupée par le kext"). 2) Voyez-vous la différence entreSize
etWired
quand vous avez le problème avec Preview?