Podemos tratar de enfocar esto de varias maneras. Empecemos por la más fácil y veamos si podemos recoger un sysdiagnose durante el proceso de inicio de sesión:
- Inicie sesión en una de sus cuentas de trabajo.
- Ejecute lo siguiente Terminal para habilitar la simbología del kernel:
sudo nvram boot-args="keepsyms=1"
. Asegúrate de copiar y pegar esto de manera que introduzcas las comillas rectas en lugar de las rizadas/"inteligentes". (Si obtiene un error de permiso, primero tendrá que desactivar la protección de la integridad del sistema . Puedes volver a activarlo cuando termines esta investigación).
- Reinicie su máquina normalmente.
- Intente acceder a su cuenta de usuario problemática.
- En cuanto intente iniciar la sesión, mantenga pulsada la tecla ShiftControlOptionCommand y mientras mantiene estas teclas pulse y suelte el punto . clave.
- Esto pretende iniciar silenciosamente un sysdiagnose. Espere al menos 10 minutos para que se complete, y luego haga un apagado forzado (mantenga pulsada la tecla [POWER] durante 10 segundos).
- Espere 10 segundos más con la máquina apagada.
- Pulse el botón [POWER] botón. Inmediatamente después, mantenga pulsado CommandS para arrancar su máquina en modo de usuario único. Hacemos esto porque, de lo contrario, el informe de sysdiagnose se borrará cuando
/tmp
se limpia durante el arranque multiusuario.
- Puede liberar el CommandS cuando estás en un prompt de comandos y no hay más texto que se desplaza.
- A partir de aquí, hay que mover el informe de sysdiagnose a una ubicación donde no se borre:
mv /private/var/tmp/sysdiagnose* /Users/YOUR_USERNAME/Desktop
. Aquí hay que sustituir YOUR_USERNAME
con el nombre de usuario corto de uno de sus usuarios en funcionamiento.
exit
- Inicie sesión con el usuario en funcionamiento cuyo nombre utilizó en el paso 10.
- Localice el archivo sysdiagnose en su escritorio. Haga doble clic para descomprimirlo.
- Sube el
spindump.txt
en el directorio del informe descomprimido utilizando PasteBin o un servicio equivalente y añada el enlace a su pregunta.
ACTUALIZACIÓN 1:
Mirando tu spindump, hay varios procesos que están usando una cantidad significativa de CPU:
% grep "CPU Time: " spindump.txt | sort -d | tail -n 5
CPU Time: 0.330s (661.7M cycles, 244.5M instructions, 2.71c/i)
CPU Time: 0.792s (1615.4M cycles, 642.4M instructions, 2.51c/i)
CPU Time: 2.675s (5.9G cycles, 7.4G instructions, 0.80c/i)
CPU Time: 4.263s (9.6G cycles, 9.0G instructions, 1.07c/i)
CPU Time: 6.450s (12.6G cycles, 15.3G instructions, 0.82c/i)
El de 6,45s pertenece a spindump, lo que es de esperar. Los procesos más interesantes son
% grep -B 12 4.263s spindump.txt | grep Process:
Process: ReportCrash [369]
% grep -B 12 2.675s spindump.txt | grep Process:
Process: MRT [83]
% grep -B 12 0.792s spindump.txt | grep Process:
Process: WindowServer [144]
% grep -B 12 0.330s spindump.txt | grep Process:
Process: kernel_task [0]
En primer lugar, es sorprendente ver ReportCrash
corriendo. Esto sugiere que ha habido un proceso reciente que se ha estrellado y que ahora se está analizando y preparando para informar a Apple. Aunque hay varias explicaciones posibles de por qué está ocurriendo esto en este momento, una teoría es que un elemento de inicio de sesión o un agente de lanzamiento está fallando (repetidamente) al intentar iniciar sesión. Puede consultar esto examinando (desde una cuenta de trabajo o desde el modo de usuario único) el /Library/Logs/DiagnosticReports
y la ordenación por fecha de caducidad ( ls -lt
en el Terminal / línea de comandos). Compruebe si hay registros de fallos en torno a la hora de su intento de inicio de sesión.
Siguiente, MRT
está usando mucho tiempo. MRT es la herramienta de eliminación de malware. Examinando su stackshot, su hilo principal no parece estar bloqueado y parece estar haciendo un montón de E/S y análisis normales. Supongo que está haciendo su trabajo ordinario de escanear tu sistema de archivos en busca de malware. Nada indica que esté involucrado en la cadena de fallos.
Por último, al llegar a WindowServer
y kernel_task
Cualquiera de los dos puede bloquear fácilmente un inicio de sesión si se comportan mal, de nuevo no veo nada en ninguno de los stackshot que indique un comportamiento anormal.
Por lo tanto, hemos descartado que el hambre de la CPU sea un modo de fallo en este caso. Ahora veamos si hay un proceso bloqueado dentro de la ruta de acceso crítica. Noto prominentemente la ausencia de Finder
de la lista de procesos en ejecución, por lo que está claro que hay algo que impide su lanzamiento.
% grep -c "Process: Finder" spindump.txt
0
Veamos si hay algún proceso que esté intentando fork()
y podría estar estancado:
% grep "Parent: " spindump.txt | grep -v "launchd \[1\]" | sort -d
Parent: UserAccountUpdater [363]
Parent: UserAccountUpdater [363]
Parent: UserAccountUpdater [363]
Parent: kernel_task [0]
Parent: loginwindow [147]
Parent: sysdiagnose [404]
Parent: systemstats [84]
Eso es interesante. UserAccountUpdater
se está ejecutando, lo que sugiere que su cuenta de usuario se está actualizando. Dado que usted mencionó el uso del Asistente de Migración para llevar su cuenta de Mojave a Big Sur, tiene sentido que la actualización haya comenzado y no haya tenido la oportunidad de completarse. Entonces, ¿hay algo bloqueado en esto?
% grep UserAccountUpdater spindump.txt | grep block
*1000 ??? (kernel + 6600128) [0xffffff800085b5c0] (blocked by wait4 on UserAccountUpdater [363])
La respuesta es sí. Este marco proviene de un hilo en loginwindow
que también colgará absolutamente el proceso de inicio de sesión si algo no está bien. Hay tres hijos de UserAccountHelper
:
% grep -C 6 "Parent: UserAccountUpdater" spindump.txt | grep "Process: "
Process: mbcachecleanup [396]
Process: migrationhelper [389]
Process: ReminderMigrationTool [390]
mbcachecleanup
y migrationhelper
ambos tienen rastros saludables. ReminderMigrationTool
Sin embargo, se bloquea en una transacción XPC:
Thread 0xcf2 DispatchQueue "com.apple.main-thread"(1) 1000 samples (1-1000) priority 31 (base 31)
1000 start + 1 (libdyld.dylib + 87585) [0x7fff20555621]
1000 ??? (ReminderMigrationTool + 15952) [0x101fa0e50]
1000 -[CalInProcessReminderMigrator attemptMigrationWithHomeDirectory:] + 278 (ReminderMigration + 20449) [0x7fff732c0fe1]
1000 -[CalTruthFilesReminderMigrator attemptMigrationWithHomeDirectory:] + 196 (ReminderMigration + 28484) [0x7fff732c2f44]
1000 -[CalTruthFilesReminderMigrator _attemptMigrateRemindersDataWithCalendarDirectory:] + 175 (ReminderMigration + 28783) [0x7fff732c306f]
1000 -[CalTruthFilesReminderMigrator _performMigrationInCalendarDirectory:withContext:] + 941 (ReminderMigration + 30684) [0x7fff732c37dc]
1000 -[CalReminderMigrationContext ensureAccountsExist:] + 48 (ReminderMigration + 21943) [0x7fff732c15b7]
1000 -[CalDefaultReminderKitDatabaseMigrationContext ensureAccountsExist:error:] + 142 (ReminderMigration + 9833) [0x7fff732be669]
1000 -[REMDatabaseMigrationContext ensureAccountsExist:error:] + 64 (ReminderKit + 442631) [0x7fff3d851107]
1000 -[REMDatabaseMigrationContext ensureAccountsExistWithMigrationAccountInfos:error:] + 219 (ReminderKit + 440075) [0x7fff3d85070b]
1000 -[REMDatabaseMigrationContext _cleanLocalDatabases:] + 100 (ReminderKit + 444147) [0x7fff3d8516f3]
1000 -[REMStore fetchAccountsIncludingInactive:error:] + 75 (ReminderKit + 107141) [0x7fff3d7ff285]
1000 -[REMAccountsDataView fetchAllAccountsForAccountManagementWithError:] + 114 (ReminderKit + 633685) [0x7fff3d87fb55]
1000 -[REMStore resultFromPerformingInvocation:error:] + 839 (ReminderKit + 119019) [0x7fff3d8020eb]
1000 -[REMStore _xpcSyncStorePerformerWithReason:errorHandler:] + 164 (ReminderKit + 124938) [0x7fff3d80380a]
1000 -[REMXPCDaemonController syncStorePerformerWithReason:errorHandler:] + 145 (ReminderKit + 466128) [0x7fff3d856cd0]
1000 -[REMXPCDaemonController _syncPerformerWithResolver:reason:errorHandler:] + 109 (ReminderKit + 467124) [0x7fff3d8570b4]
1000 -[REMXPCDaemonController _resolveAndCachePerformerWithResolver:reason:errorHandler:] + 482 (ReminderKit + 469269) [0x7fff3d857915]
1000 -[REMXPCDaemonController _resolvePerformerWithResolver:reason:errorHandler:] + 544 (ReminderKit + 473070) [0x7fff3d8587ee]
1000 -[REMXPCDaemonControllerPerformerResolver_store resolveWithDaemon:reason:completion:] + 209 (ReminderKit + 475082) [0x7fff3d858fca]
1000 _NSXPCDistantObjectSimpleMessageSend4 + 42 (Foundation + 821239) [0x7fff214267f7]
1000 -[NSXPCConnection _sendSelector:withProxy:arg1:arg2:arg3:arg4:] + 155 (Foundation + 821458) [0x7fff214268d2]
1000 -[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:] + 3090 (Foundation + 118889) [0x7fff2137b069]
1000 __NSXPCCONNECTION_IS_WAITING_FOR_A_SYNCHRONOUS_REPLY__ + 9 (Foundation + 126953) [0x7fff2137cfe9]
1000 xpc_connection_send_message_with_reply_sync + 238 (libxpc.dylib + 45484) [0x7fff2027c1ac]
1000 dispatch_mach_send_with_result_and_wait_for_reply + 50 (libdispatch.dylib + 105326) [0x7fff203a5b6e]
1000 _dispatch_mach_send_and_wait_for_reply + 518 (libdispatch.dylib + 104310) [0x7fff203a5776]
1000 mach_msg_trap + 10 (libsystem_kernel.dylib + 3710) [0x7fff20505e7e]
*1000 ipc_mqueue_receive_continue + 0 (kernel + 573344) [0xffffff800029bfa0] (blocked by turnstile waiting for launchd [1] after 3 hops)
¿Hay otros?
% grep -c "1000 __NSXPCCONNECTION_IS_WAITING_FOR_A_SYNCHRONOUS_REPLY__" spindump.txt
6
Sí: hay seis cuadros que están bloqueados de forma similar. Uno ya se ha explicado anteriormente. Otro está en UserAccountHelper
bloqueando el acceso al registro de fuentes. Muy interesante, fontworker
y fontd
también se bloquean de esta manera. fontd
está en el com.apple.xtype.ScannerQueue
cola de envío. Esto me lleva inmediatamente a sospechar que el gestor de fuentes se cuelga mientras escanea su biblioteca de fuentes local. Tal vez hay una fuente corrupta y/o una colección de fuentes instalada en su usuario ~/Library/Fonts
y/o ~/Library/FontCollections
. Deberías renombrar estos directorios e intentar entrar de nuevo.
Hay dos cuadros más en WiFiAgent
y otherbsd
. También he visto marcos bloqueados en securityd
y secinitd
que puede ser relevante, pero vamos a investigar lo que hemos discutido hasta ahora.
Para resumir:
- Cambia el nombre de tu usuario
Fonts
y FontCollections
directorios (probablemente lo más fácil sea arrancar en modo de usuario único y hacer esto desde la línea de comandos, por ejemplo cd /Users/YOUR_USERNAME/Library && mv Fonts FontsDISABLED && mv FontCollections FontCollectionsDISABLED
).
- Comprueba si hay algo en el archivo de ese usuario
~/Library/LaunchAgents
.
- Registro de entrada
/Library/Logs/DiagnosticReports
para los informes de accidentes en torno al momento de la avería.