¿Cómo investigar el uso de memoria de tareas de alto kernel?

131

Estaba usando mi MBP (con 16 GB de RAM) como de costumbre y de repente tengo esta ventana emergente que:

Su sistema se ha quedado sin memoria de la aplicación.

Para evitar problemas con su computadora, cierre todas las aplicaciones que no esté utilizando.

Forzar cierre de aplicaciones: su sistema se ha quedado sin memoria de la aplicación: captura de pantalla

Obviamente he cerrado algunos que pude, pero no sirvió de nada.

Después de verificar la memoria, parece que la tarea del núcleo se comió 7GB y se utilizó una memoria de intercambio de 22.36GB de un total de 23GB (que obviamente fue el caso). Sin embargo, todavía tengo 20 GB de espacio libre en mi SDD.

Memoria - Menús iStat: captura de pantalla

El Monitor de actividad no ayudó mucho mientras mi OS X se dirigía a la destrucción.

Explorador de procesos

kernel_task - pestaña Memoria: captura de pantalla kernel_task - pestaña Estadísticas: captura de pantalla

Mis topestadísticas antes de que mi núcleo se congele:

Processes: 344 total, 2 running, 5 stuck, 337 sleeping, 2580 threads                                                                                                                         19:23:56
Load Avg: 1.56, 1.62, 2.09  CPU usage: 3.51% user, 8.47% sys, 88.1% idle   SharedLibs: 46M resident, 0B data, 6572K linkedit. MemRegions: 757970 total, 2139M resident, 56M private, 907M shared.
PhysMem: 9410M used (6198M wired), 556M unused. VM: 1155G vsize, 1311M framework vsize, 112872658(320) swapins, 122668389(0) swapouts. Networks: packets: 299419263/363G in, 142126838/14G out.
Disks: 58970173/1079G read, 20012389/1120G written.

Al final, mi OS X se congeló y tuve que hacer un restablecimiento completo, reparar mi SDD en modo de recuperación y repararlo después (recuperar el trabajo perdido, solucionar conflictos de aplicaciones, verificar mi carpeta perdida + encontrada, las pestañas de Chrome / Terminal desaparecidas, dolor de cabeza, etc. )

Mi pregunta es, ¿cómo verifico el uso de memoria alta de la tarea del núcleo o cómo lidiar adecuadamente con ese tipo de situación? Intenté tomar Sample con Activity Monitor, pero está atenuado.


Mis detalles de MBR: 2.3GHz Intel Core i7 (finales de 2013) con 16GB de RAM. OS X: 10.9.5

kenorb
fuente
1
@klanomath Por lo general, tengo muchas congelaciones, especialmente con un tiempo de actividad prolongado y estas son solo congelaciones del kernel por razones desconocidas (mi MBR es bastante nuevo). Pero esta es la primera vez que veo esa ventana emergente que no tengo memoria (con 16 GB de RAM y 50 GB de espacio libre). Sin embargo, mi pregunta principal es cómo investigar el uso de memoria de la tarea del núcleo, por lo que si es reproducible no debería ser relevante.
kenorb
55
Use zprint -t(León) o sudo zprint -t(León de montaña y posterior).
klanomath
1
Tiene razón con la irrelevancia de la reproducibilidad con respecto a su pregunta en el título, pero podría ser relevante para resolver su (s) problema (s).
klanomath
1
¿Le importaría agregar el resultado a su pregunta (o guardarlo en sus documentos)? Solo para referencia futura / para poder compararlo con un zprint realizado en un estado del sistema más crítico. En mi humilde opinión es una fuga de mala suerte. Si lo publicas, puedo contarte más.
klanomath
1
Tengo el mismo problema de repente. Estoy bastante seguro de que está relacionado con Docker para Mac o Hyperkit. Tan pronto como detengo docker para mac, kernal_task comienza a comer más de 10GB de memoria
Charlie Martin

Respuestas:

176

Hay muchas cosas que salen mal con el uso elevado de tareas de kernel. Por lo general, esto está relacionado con un proceso defectuoso o pesado que utiliza en exceso los recursos del sistema (como indexar el almacenamiento, ejecutar máquinas virtuales, demasiadas pestañas en el navegador web u otros procesos en segundo plano).

Estos son algunos métodos que ayudan a investigar los problemas de uso del kernel de OS X:

Metodos basicos

  • Ejecute Console.appy verifique ' Todos los mensajes ' para ver si algo inusual está sucediendo actualmente.
  • Use el Monitor de actividad para leer la memoria del sistema y determinar cuánta CPU, RAM y disco se está utilizando.

    Alternativamente, ejecute topen la Terminal y mantenga presionado Spacepara actualizar: es más fácil encontrar el problema de la causa (¿ intercambios / intercambios / discos ?).

  • Ejecútelosudo fs_usage en la Terminal para informar las llamadas al sistema y las fallas de página relacionadas con la actividad del sistema de archivos en tiempo real (creo que esta es la mejor opción de todas las demás). Luego presiona Control- Cpara detenerlo.

    Acción: considere eliminar aplicaciones que aparecen con frecuencia en la lista, pero no las está utilizando.

    Obtenga más información en: ¿Cómo depuro un proceso “kernel_task” fuera de control?

  • Corresudo syscallbypid.d (o syscallbyproc.d), espera un poco, presiona Control- C. Ahora verifique qué proceso generó la mayor cantidad de llamadas al sistema en ese tiempo dado (última columna) y si lo reconoce, considere matarlo. Si no, busca en Google y aprende más sobre esto

Métodos avanzados

  • Use el sysdiagnosecomando (puede activarse presionando Shift- Control- - - .(punto) para recopilar rápidamente información de diagnóstico de todo el sistema útil para investigar problemas de memoria / rendimiento del sistema (aparecerá en /var/tmp) por usted o por los chicos de Apple. Durante el análisis, trate de no hacerlo cualquier cosa, cuando haya terminado, considere descomprimir el archivo generado y analizar los registros.

    Consulte: ¿Cómo obtiene archivos de diagnóstico del sistema de OS X?

  • Ejecute footprintpara recopilar información de memoria detallada en un nivel de tipo por región VM y bytes intercambiados:

    sudo footprint -a
    

    Versión antigua:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • Úselo spindumppara perfilar todo el sistema, generará un /tmp/spindump.txtarchivo (incluido el núcleo y sus extensiones).

  • Se usa vm_statpara mostrar estadísticas de memoria virtual. P.ej

    vm_stat 1 # to display every second.
    
  • Utilícelo zprintpara verificar información sobre el uso del núcleo, es posible:

    sudo zprint -t -s | head -n20
    

    Mostrará las zonas de kernel que más se desperdician.

  • Úselo newproc.dpara espiar nuevos procesos a medida que se ejecutan, creatbyproc.dpara archivos:

    sudo newproc.d
    sudo creatbyproc.d
    

    Nota: en el nuevo OS X (10.11 o superior), esto puede no funcionar cuando la protección de integridad está habilitada (verifique csrutil status).

  • Prueba sar: el indicador de actividad del sistema que puede muestrear e informar varios contadores estadísticos acumulativos mantenidos por el sistema operativo.

Para herramientas de depuración más útiles, verifique los scripts de dtrace ( grep dtrace /usr/bin/*). Si conoce el proceso defectuoso que causa el problema, puede utilizarlo dtrusspara depurarlo.


Comportamiento

Aquí hay algunas sugerencias que pueden ayudarlo con los problemas del sistema operativo.

  • Libere memoria inactiva. Para hacer esto, primero debe vaciar el caché y forzar la purga del caché del disco:

    sync && sudo purge
    

    sync - forzar la finalización de grabaciones de disco pendientes (vaciar caché)

    purge - forzar la purga del caché de disco (vaciar y vaciar)

    Su función es básicamente terminar todas las operaciones pendientes de E / S que usan caché de disco y luego liberar todo el caché de disco ocupado, por lo que debería liberar espacio en disco para facilitar la paginación y el intercambio de memoria principal. Es seguro de usar, ya que no afecta la memoria anónima que se ha asignado a través de malloc, vm_allocate, etc.

  • Use algunas aplicaciones de terceros para limpiar parte de la memoria utilizada en exceso, como iBoostUp , SystemPal , etc.

  • También puede deshabilitar Spotlight temporal:

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist 
    

    Y considere otros servicios por:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • Salga de su navegador web y verifique si eso ayuda. Por ejemplo, el uso de Chrome es muy ingenioso, especialmente cuando hay un procesamiento front-end en segundo plano (por ejemplo, Javascript) o animaciones similares a anuncios que constantemente muestran el contenido.

kenorb
fuente
1
Spotlight sigue apareciendo, pero no lo estoy usando, y cada vez que lo mato, vuelve a aparecer al segundo ... ¿Cómo / debo hacer para deshacerme de él?
ling
1
@ling Te sugiero que hagas otra pregunta entonces, ya que esto está relacionado con la memoria de tareas de alto kernel, no un Spotlight específico.
kenorb
2
suspiro Tengo 4 GB de RAM en mi Mac, y recientemente la tarea del kernel estaba subiendo a 3.1 GB, básicamente congelando toda mi computadora. Cerré mi pestaña de Google Drive, y bajó a 950 MB ...
Zizouz212
3
No es lo suficientemente específico como para resolver realmente el problema de alta kernel_taskmemoria y uso de CPU.
hyiltiz
6

Tuve un problema muy similar después de reemplazar mi pantalla LCD en un iMac de finales de 2012. El ventilador funcionaba a altas RPM y tenía un alto uso de CPU Kernel_task. Lo reduje a un sensor de temperatura que debe mover de la pantalla LCD anterior a la nueva pantalla de reemplazo. si olvida hacerlo, la velocidad de la CPU y Kernel_task se verán afectadas por la desaceleración de su sistema.

helecho10
fuente