Anteriormente me han dicho que una señal de que alguna aplicación tiene una pérdida de memoria es que kernel_task
tiene una gran huella de memoria, generalmente del orden de gigabytes. Si un awry kext
estaba causando este uso de la memoria, esperaríamos ver una discrepancia entre la memoria asignada y las que se esperaba asignar, 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 "Cableado" y "Nombre".
Mientras escribo mi tesis, he notado que cambiar un pdf mientras está abierto en Vista previa a menudo causa cosas malas: ocasionalmente, el uso de memoria de kernel_task
puede aumentar a alrededor de ocho gigabytes, o más. Si mato la vista previa, vuelve a la normalidad, al instante . Entonces, obviamente, algo está mal, y la vista previa está perdiendo memoria en estas condiciones.
Entonces, mi pregunta es esta: si yo sé que un proceso ha filtrado ram a través de un aumento repentino e inesperado en la huella de kernel_task
, ¿por qué no puede OS X sabe que algo ha salido mal. Si matar Vista previa restaura mi falta de memoria malloc()
'd, ¿por qué no Darwin hace la recolección de basura de forma automática para mí?
¿Tengo una mala interpretación de cómo funciona la administración de memoria?
EDITAR: (15/9/15)
Aquí hay una demostración de lo que estoy hablando. En primer lugar, observo un alto uso de memoria por kernel_task
(la vista previa de la nota está abierta, solo visible en la parte inferior del Monitor de actividad, con 333 MiB de RAM):
SiguiendolasobservacionesútilesdeAshleyacontinuación,veamoscuántoestáutilizandocadakext:
$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 GPUs discretas e integradas; sus conductores solo usan unos pocos MiB de ram con cable. En mi corazonada, matemos la vista previa y veamos qué sucede con la huella de memoria de kernel_task
:
La vista previa se ha ido, 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 : error reportado como No. 22701036. Todavía estoy esperando una respuesta de Apple. No hay nada particularmente interesante si inspeccionas el proceso en ActivityMonitor, pero tal vez me esté perdiendo algo.