¿Cómo diagnosticar el globo OS X kernel_task y el uso de memoria cableada?


18

Tengo un problema muy extraño, que me cuesta diagnosticar la causa raíz.

Tengo un Mac Pro (2008, 8 núcleos, 2.8 GHz, 8800GT) con 14 GB de RAM (¡actualizado recientemente debido a este problema!).

Cuando inicio mi sistema e inicio sesión, vm_stat / top / Activity Monitor mostrará que kernel_task tiene unos 150 MB asignados, y la máquina tiene unos 800 MB de memoria cableada asignada.

Incluso al principio, 800 MB parecen asignar una gran cantidad de memoria cableada sin ejecutar aplicaciones, pero empeora. (NB: Wired está bloqueado, memoria no intercambiable )

Después de un tiempo muy corto, a veces provocado por algo tan simple como iniciar un terminal, kernel_task se disparará a 8-900 MB de Real Mem (RSIZE), y Wired Memory se acelerará a 1.6 GB (lo que implica que todas las solicitudes de memoria adicionales son para RAM cableada en el núcleo).

Si dejo todo (es decir: no hay aplicaciones en ejecución, excluir un monitor de actividad o terminal para ver la parte superior), no hay una reducción apreciable en kernel_task RSIZE o el uso de la memoria alámbrica. Ir en la dirección opuesta y cargar el sistema con tareas también muestra que la memoria cableada no se reduce, y que lo más importante es que no se reduce con preferencia al intercambio pesado.

Si cierro la sesión y vuelvo a iniciarla, se reduce un poco (450 MB kernel_task, 1,28 GB con cable), pero no vuelve al inicio.

No estoy ejecutando ningún kext s loco , y además, kextstat no muestra grandes asignaciones de memoria allí; el más grande es com.apple.nvidia.nv50hal con aproximadamente 4 MB de memoria.

En general, la máquina se siente más lenta cuando esto ha sucedido, como era de esperar porque se ha marcado una gran cantidad de RAM como no paginable.

Entonces tengo algunas preguntas:

1) ¿Hay una buena manera de diagnosticar qué ha asignado toda esta memoria cableada? A menudo es más de 2 veces el tamaño de kernel_task, sin ejecutar aplicaciones. El total de memoria real no parece sumar, parece que hay un montón de RAM que no se tiene en cuenta en ninguna parte.

2) ¿Qué está sucediendo para que el núcleo de repente requiera 6 veces más memoria?


1
Probablemente relacionado con este código.google.com
p

Respuestas:


5

Para investigar por qué el núcleo usa más memoria de lo habitual, puede usar diferentes herramientas.

  1. Ejecute el Monitor de actividad para verificar qué procesos utilizan la mayor parte de la memoria, por lo que es una kernel_tasktarea, no otra, que usa más memoria de lo habitual (luego considere eliminarla).
  2. Ejecute en la Terminal vm_stat 1para ver estadísticas de memoria en tiempo real y si su memoria realmente aumenta cada segundo.
  3. Ejecute la fs_usageherramienta (como root) para monitorear las llamadas al sistema y las fallas de página en tiempo real.
  4. Para verificar la suma de asignaciones sucias / anónimas de múltiples procesos ejecutados en la Terminal:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Recopilaría información de la memoria, como cuánto se intercambió (por usuario o memoria del núcleo).

  5. Además, si crees que es el kernel el que usa más memoria, prueba la zprintherramienta:

    sudo zprint -t -s | head -n20
    

    Mostrará la información sobre las zonas del núcleo.

Si desea forzar la purga de caché de disco (para liberar algo de memoria), puede intentar:

sync && sudo purge

Ver también: ¿Cómo investigar el uso de memoria de tareas de alto kernel? en AD SE


3

Las extensiones de kernel son solo uno de los muchos, muchos fragmentos de código que el sistema operativo puede ejecutar sin su conocimiento. Tengo una pequeña utilidad basada en Python llamada Consultant's Canary que te ayudará a encontrar bastantes de ellas:

Si eso no revela posibles culpables, entonces diría que arranque desde una instalación limpia y vea si puede reproducir el problema allí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.