El kernel Linux registra sus mensajes (detección de hardware, errores de drivers, fallos de disco, el OOM killer, avisos de red) en un buffer circular en memoria llamado ring buffer. dmesg lee ese buffer y journalctl -k muestra los mismos mensajes guardados por systemd-journald, incluidos los de arranques anteriores. En este tutorial aprenderás a leer y filtrar los mensajes del kernel en Ubuntu 24.04, a revisar lo que pasó antes de un reinicio y a reconocer los errores más habituales en un servidor.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. Los comandos funcionan igual en Debian 12 y Rocky Linux 9.
  • Un usuario no root con privilegios sudo.

Paso 1: Leer el buffer del kernel con dmesg

En Ubuntu, el parámetro kernel.dmesg_restrict está activado, así que un usuario normal no puede leer el buffer:

dmesg
dmesg: read kernel buffer failed: Operation not permitted

Usa sudo. Como la salida es larga, pásala a less:

sudo dmesg | less
[    0.000000] Linux version 6.8.0-45-generic (buildd@lcy02-amd64-075) (x86_64-linux-gnu-gcc-13 ...) #45-Ubuntu SMP PREEMPT_DYNAMIC ...
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.8.0-45-generic root=UUID=4f1c2a9e-... ro console=tty1 console=ttyS0
[    0.412887] PCI: Using configuration type 1 for base memory

El número entre corchetes son los segundos transcurridos desde el arranque. Para verlos como fecha y hora legibles, usa -T:

sudo dmesg -T | tail -n 5
[Thu Sep 25 09:14:02 2026] EXT4-fs (sda1): mounted filesystem 4f1c2a9e-... r/w with ordered data mode.

Otras opciones prácticas:

OpciónUso
-HSalida legible con colores y paginador
-wSigue los mensajes nuevos en tiempo real, como tail -f
-xMuestra la facilidad y el nivel de cada mensaje
-eMarca de tiempo relativa legible ([+0.000123])

Paso 2: Filtrar por nivel y por facilidad

Cada mensaje tiene un nivel de prioridad, de más a menos grave:

NivelNombreEjemplo
0emergEl sistema es inutilizable
1alertHay que actuar de inmediato
2critFallo crítico de hardware
3errError de E/S, fallo de un driver
4warnAviso, como un proceso bloqueado
5noticeEvento normal pero relevante
6infoInformación, como la detección de un dispositivo
7debugDepuración

Para ver solo errores y avisos, que es lo primero que hay que revisar ante un problema:

sudo dmesg -T --level=emerg,alert,crit,err,warn

También puedes filtrar por facilidad. Los mensajes del propio kernel usan kern; algunos procesos de usuario escriben en el buffer con otras facilidades:

sudo dmesg -T --facility=kern --level=err

Y combinar con grep para centrarte en un dispositivo o subsistema:

sudo dmesg -T | grep -iE 'sda|nvme|ext4'

Paso 3: Seguir los mensajes en tiempo real

Mientras reproduces un problema, por ejemplo al conectar un disco o forzar tráfico de red, deja los mensajes nuevos a la vista:

sudo dmesg -Tw

Pulsa Ctrl+C para salir. Para ver solo los errores que vayan llegando:

sudo dmesg -Tw --level=err,warn

Paso 4: Consultar el kernel con journalctl

El ring buffer tiene un tamaño limitado y se pierde al reiniciar. systemd-journald guarda una copia de los mensajes del kernel y, en Ubuntu 24.04, la conserva en disco en /var/log/journal/, así que puedes consultar arranques anteriores.

Los miembros del grupo adm pueden leer el journal sin sudo. El usuario creado al instalar Ubuntu suele pertenecer a él; compruébalo con id.

Mensajes del kernel del arranque actual:

journalctl -k

Solo errores y más graves, con -p (acepta los mismos nombres de nivel):

journalctl -k -p err

Por intervalo de tiempo:

journalctl -k --since "2026-09-25 08:00" --until "2026-09-25 10:00"
journalctl -k --since "1 hour ago"

Revisar un arranque anterior

Esto es lo más útil tras un reinicio inesperado. Lista los arranques guardados:

journalctl --list-boots
IDX BOOT ID                          FIRST ENTRY                 LAST ENTRY
 -2 5b1d0c3e9a7f4e2b8c61d0f9a2b3c4d5 Mon 2026-09-22 10:02:11 UTC Wed 2026-09-24 23:58:40 UTC
 -1 a8e7f6d5c4b3a2918070f6e5d4c3b2a1 Wed 2026-09-24 23:59:30 UTC Thu 2026-09-25 03:12:07 UTC
  0 0f1e2d3c4b5a69788796a5b4c3d2e1f0 Thu 2026-09-25 03:13:02 UTC Thu 2026-09-25 09:20:44 UTC

Revisa las últimas líneas del kernel del arranque anterior, justo antes de caer:

journalctl -k -b -1 -n 50

Si lo último que aparece son mensajes normales y luego nada, el servidor probablemente se apagó de golpe (corte de alimentación o reinicio forzado desde fuera). Si hay un Kernel panic, un Out of memory o errores de disco justo antes, ahí tienes la causa.

Paso 5: Reconocer los errores más comunes

Estos son los mensajes que más aparecen en servidores y qué significan.

Falta de memoria (OOM killer)

journalctl -k | grep -iE 'out of memory|oom-kill'
Sep 25 04:11:27 web01 kernel: Out of memory: Killed process 2314 (php-fpm8.3) total-vm:812344kB, anon-rss:602112kB, file-rss:0kB, shmem-rss:0kB, UID:33 pgtables:1480kB oom_score_adj:0

El kernel se quedó sin memoria y mató el proceso indicado para liberarla. La solución es reducir el consumo de la aplicación (menos workers, límites de memoria) o ampliar la RAM; añadir swap solo da margen. Si un servicio de systemd muere de repente, revisa siempre este mensaje.

Errores de disco y de sistema de archivos

journalctl -k -p err | grep -iE 'i/o error|ext4-fs error|xfs|blk_update_request'
Sep 25 05:02:13 db01 kernel: I/O error, dev sda, sector 2048123 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
Sep 25 05:02:13 db01 kernel: EXT4-fs error (device sda1): ext4_find_entry:1683: inode #131073: comm mysqld: reading directory lblock 0

Un I/O error indica que el disco no pudo leer o escribir un sector. Si se repite, el disco o el almacenamiento subyacente está fallando: haz copia de seguridad de inmediato. En un VPS, contacta con soporte con la hora y el mensaje exactos. Tras errores de ext4 el sistema de archivos puede pasar a solo lectura (Remounting filesystem read-only) y hay que revisarlo con fsck desde modo de rescate.

Procesos bloqueados

INFO: task jbd2/sda1-8:312 blocked for more than 120 seconds.

Un proceso lleva más de 120 segundos esperando, casi siempre por E/S. Suele acompañar a discos saturados, almacenamiento en red lento o fallos de hardware. Revisa la latencia de disco con iostat -x 1 (paquete sysstat).

Segfaults de aplicaciones

nginx[8421]: segfault at 0 ip 00005581e2a3b1c4 sp 00007ffd4b1e2a80 error 4 in nginx[5581e2a00000+c3000]

La aplicación accedió a memoria no válida y el kernel la terminó. Es un fallo de la aplicación o de una librería, no del kernel. Actualiza el paquete y revisa sus módulos o extensiones.

Red

journalctl -k | grep -iE 'link is (up|down)|nf_conntrack: table full|syn flooding'
MensajeSignificado
Link is Down / Link is UpLa interfaz perdió o recuperó enlace
nf_conntrack: table full, dropping packetLa tabla de seguimiento de conexiones del firewall está llena y se descartan paquetes
Possible SYN flooding on port 443. Sending cookies.Llegan más conexiones nuevas de las que caben en la cola; puede ser un pico de tráfico legítimo o un ataque

Para nf_conntrack: table full, compara el uso con el límite:

sudo sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max

Si el contador está pegado al máximo, sube net.netfilter.nf_conntrack_max en un archivo de /etc/sysctl.d/ y aplícalo con sudo sysctl --system.

Bloqueos de CPU y panics

watchdog: BUG: soft lockup - CPU#2 stuck for 22s! [kworker/2:1:1234]

Una CPU no ha podido atender otras tareas durante más de 20 segundos. En máquinas virtuales suele deberse a contención en el host o a una sobrecarga momentánea; si se repite, guarda los mensajes completos para el soporte. Un Kernel panic detiene el sistema; su traza completa aparece en journalctl -k -b -1 si el journal llegó a escribirla.

Paso 6: Vigilar los errores del kernel

No hace falta escribir scripts de monitorización para lo básico. Para revisar rápidamente si ha habido errores del kernel en el último día:

journalctl -k -p err --since yesterday --no-pager

Si no hay nada que mostrar, la salida es -- No entries --. Para una vigilancia continua, envía el journal a tu sistema centralizado de logs o de alertas (por ejemplo, con Promtail, Vector o rsyslog hacia un servidor remoto) y crea alertas sobre priority <= 3 para el identificador kernel.

Solución de problemas

dmesg: read kernel buffer failed: Operation not permitted. Es el comportamiento por defecto de Ubuntu (kernel.dmesg_restrict = 1). Usa sudo dmesg o journalctl -k; no desactives la restricción, porque el buffer del kernel puede revelar direcciones de memoria útiles para un atacante.

journalctl -k -b -1 indica que ese arranque no está disponible. El journal no es persistente. Comprueba que existe /var/log/journal/; si no, créalo con sudo mkdir -p /var/log/journal y reinicia journald con sudo systemctl restart systemd-journald. Solo se guardarán los arranques a partir de ese momento.

Faltan los mensajes del principio del arranque en dmesg. El ring buffer se ha llenado y ha sobrescrito los mensajes más antiguos. Consúltalos con journalctl -k -b, que los guardó al arrancar.

Conclusión

Ahora sabes leer los mensajes del kernel con dmesg, filtrarlos por nivel, seguirlos en tiempo real, revisar arranques anteriores con journalctl -k -b -1 e interpretar los errores más habituales: OOM, disco, procesos bloqueados, red y bloqueos de CPU. Como siguientes pasos, puedes configurar la retención del journal en /etc/systemd/journald.conf, centralizar los logs de varios servidores o ajustar los parámetros del kernel implicados con sysctl.