In precedenza mi è stato detto che un segno che alcune applicazioni hanno una perdita di memoria è che kernel_task
ha un ingombro di memoria di grandi dimensioni, comunemente dell'ordine dei gigabyte. Se una percentuale errata di% co_de causava questo utilizzo della memoria, ci aspettiamo di vedere una discrepanza tra la memoria allocata e quelle che ci si aspetta che vengano allocate, ovvero
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
restituirebbe qualcosa di diverso dalle parole "Wired" e "Name".
Durante la stesura della mia tesi, ho notato che la modifica di un pdf mentre è aperta in Anteprima spesso causa brutte cose: occasionalmente, l'utilizzo della memoria di kext
può aumentare fino a circa otto gigabyte o più. Se uccido l'anteprima, torna alla normalità, immediatamente . Quindi, ovviamente qualcosa non va - e Anteprima sta perdendo memoria in queste condizioni.
Quindi la mia domanda è questa: se I sa che un processo ha fatto trapelare ram attraverso un improvviso e inaspettato aumento dell'impronta di kernel_task
, perché non può OS X sappi che qualcosa è andato storto. Se l'eliminazione dell'anteprima ripristina la memoria mancante di kernel_task
d, perché non Darwin fa automaticamente la garbage collection per me?
Ho un malinteso fondamentale su come funziona la gestione della memoria?
EDIT: (15/9/15)
Ecco una dimostrazione di ciò di cui sto parlando. Prima di tutto, noto un utilizzo di memoria elevato di malloc()
(nota Anteprima è aperta, appena visibile nella parte inferiore di Activity Monitor, utilizzando 333 MiB di ram):
SeguendoleutiliosservazionidiAshleydiseguito,scopriamoquantoognikextstausando:
$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
$
Quindi, non una quantità enorme. La mia macchina ha GPU discrete e integrate; i loro driver utilizzano solo pochi MiB di ram cablati. Sulla mia intuizione, uccidiamo Anteprima e guardiamo cosa succede all'impronta di memoria di kernel_task
:
L'anteprima è sparita e l'ingombro della memoria del kernel è diminuito drasticamente. Non ci sono ancora prove di un cambiamento nell'uso di kext: l'output del comando precedente è invariato.
Modifica : errore segnalato come n. 22701036. Sto ancora aspettando una risposta da parte di Apple. Non c'è niente di particolarmente interessante se si ispeziona il processo in ActivityMonitor, ma forse mi manca qualcosa.