6 votos

¿Cómo puedo aumentar el tamaño del registro de dev/log/main?

¿Cómo puedo aumentar el tamaño de dev/log/main por un factor de 10? Tengo entendido que el registro tiene un tamaño fijo (¿16K?) y que se vuelca cuando se alcanza ese límite. Me gustaría averiguar cuál es el tamaño del registro actualmente y aumentarlo en gran medida.

Estoy depurando un problema que se produce con poca frecuencia cuando el dispositivo no se ha utilizado durante un largo período de tiempo (¿tal vez una hora?). He instrumentado el código con mensajes de registro para poder entender lo que ocurre cuando se produce el fallo.

Mi problema es que mi instrumentación hace que el registro se vuelque en unos 2 minutos. Me gustaría aumentar el tamaño de dev/log/main por un factor de 10 si es posible.

0 votos

Supongo que dejarlo conectado al ordenador con adb logcat > my_log_file.log ¿Correr no es una opción?

7voto

Jack Wade Puntos 231

A partir de Android 5, el in-kernel registrador conductor es obsoleto que expuso los buffers del anillo a través de /dev/log/* dispositivos de carácter. En su lugar, un demonio de registro del espacio de usuario llamado logd gestiona los buffers "main", "system", "radio", "events" y "crash". Los búferes opcionales "security" (por ejemplo, para adb shell / push / pull de registro) y en userdebug construye el "núcleo" (para klogd ) y "stats" (para las estadísticas de los registros) se añadieron posteriormente. logd cubre principalmente la funcionalidad de su homólogo de escritorio syslogd pero también incluye klogd y parcialmente auditd para obtener los registros del subsistema SELinux del kernel. El comportamiento del demonio de registro se controla a través de diferentes propiedades .

Las aplicaciones y los procesos nativos escriben sus registros en los búferes correspondientes a través del socket /dev/socket/logdw (haciendo uso de liblog funciones). logcat lee los búferes de /dev/socket/logdr mientras controla el demonio y los buffers a través de /dev/socket/logd de la toma de corriente. Utilice -g / -G para obtener y establecer el tamaño de los búferes individuales:

  -g, --buffer-size
                  Get the size of the ring buffer.
  -G <size>, --buffer-size=<size>
                  Set size of log ring buffer, may suffix with K or M.

También hay una opción en las opciones de desarrollador: Tamaño de los búferes del registrador (que también establece la propiedad persist.logd.size ) para establecer el mismo tamaño para todos los búferes.

persist.logd.size se lee desde /data/property/ que no está disponible a menos que /data está montado y descifrado (en caso de FDE). Pero a veces los búferes pueden desbordarse incluso antes de eso, por lo que la solución es establecer ro.logd.size (a través de default.prop / build.prop o directamente en algunos *.rc ) antes del logd se inicia el servicio.

1 votos

¡Muchas gracias por el consejo de aumentar el tamaño del buffer de forma persistente entre botas! Fue muy útil mientras depuraba un error de sincronización que se produjo antes de que pudiera ajustar el tamaño.

3voto

Izzy Puntos 45544

Para conocer el tamaño real de la memoria intermedia del anillo, puede utilizar

$ adb logcat -g

Para ajustar el tamaño del búfer del anillo, puede intentar

$ adb logcat -r <kbytes>

Al menos eso es lo que dicen algunos tutoriales. Para más detalles, tal vez quieras leer Opciones del comando "adb logcat" y búferes de registro .

P.D.: Supongo que esos ajustes (tamaño del buffer del anillo ajustado manualmente) no sobrevivirán a un reinicio - sólo para tener en cuenta.

0 votos

En realidad tiene que ser adb logcat -r 100000 -f sdcard/log.log . -f es necesario.

1 votos

No creo que -r sea útil, ya que leyendo el manual de logcat, se establece el tamaño al que la herramienta logcat girará el archivo al que está escribiendo usando la opción "-f" y NO el tamaño del búfer de anillo en memoria utilizado por el módulo del núcleo del registrador.

3voto

Ben Puntos 31

Si quieres cambiar el tamaño por defecto de un buffer de registro, para que persista entre reinicios, puedes recompilar el kernel con tamaños de buffer actualizados.

El archivo que contiene las definiciones del buffer de registro es:

<kernel>/drivers/staging/android/logger.c

Las versiones que estoy viendo utilizan una macro para definir los búferes de registro en ese archivo:

DEFINE_LOGGER_DEVICE(variable, name, size)

Es probable que haya varios registradores; el "principal" suele ser el que buscas.

0 votos

¡Esto debería saberse en todas las preguntas relacionadas aquí y en stackoverflow ! Buen hallazgo. De la nota, principal y el sistema son los búferes logcat por defecto. Probablemente querrás aumentar ambos. Bueno, dependiendo de si su versión de Android los utiliza. Ver logcat -g y logcat -h

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X