Anteriormente me han dicho que una señal de que alguna aplicación tiene una fuga de memoria es que kernel_task
tiene una gran huella de memoria, normalmente del orden de los gigabytes. Si un error kext
estuviera causando este uso de memoria, esperaríamos ver una discrepancia entre la memoria asignada y la que se espera que se asigne, es decir
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
devolvería algo más que las palabras 'Wired' y 'Name'.
Mientras escribía mi tesis, me he dado cuenta de que cambiar un pdf mientras está abierto en Vista Previa a menudo hace que ocurran cosas malas: ocasionalmente, el uso de memoria de kernel_task
puede crecer hasta unos ocho gigabytes, o más. Si mato la vista previa, vuelve a la normalidad, al instante . Así que, obviamente, algo está mal - y el Preview está perdiendo memoria bajo estas condiciones.
Entonces, mi pregunta es la siguiente: si I saber que un proceso ha filtrado ram a través de un aumento repentino e inesperado de la huella de kernel_task
¿Por qué no puede OS X saber que algo ha ido mal. Si al matar la vista previa se restablece mi malloc()
'd memoria, por qué no lo hace ¿Darwin hace la recolección de basura automáticamente por mí?
¿Tengo un malentendido fundamental sobre cómo funciona la gestión de la memoria?
EDITAR: (15/9/15)
He aquí una demostración de lo que estoy hablando. En primer lugar, noto un alto uso de memoria por parte de kernel_task
(nota La vista previa está abierta, sólo visible en la parte inferior del monitor de actividad, utilizando 333 MiB de ram):
Siguiendo los útiles comentarios de Ashley a continuación, averigüemos cuánto consume cada kext:
$ 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
$
Por lo tanto, no es una cantidad enorme. Mi máquina tiene tanto GPUs discretas como integradas; sus controladores sólo utilizan unos pocos MiB de ram cableada. Siguiendo mi corazonada, matemos a Vista Previa, y veamos qué pasa con la huella de memoria de kernel_task
:
La vista previa ha desaparecido, y la huella de memoria del kernel se ha reducido drásticamente. Todavía no hay evidencia de un cambio en el uso de kext: la salida del comando anterior no ha cambiado.
Editar : Bug reportado como No. 22701036. Todavía estoy esperando una respuesta de Apple. No hay nada particularmente interesante si se inspecciona el proceso en ActivityMonitor, pero tal vez me estoy perdiendo algo.