Revisar un archivo dump generado por Linux

Categorías:

En algunas ocasiones es posible que nos haya ocurrido que el servidor se haya reiniciado de forma abrupta. Muy seguramente encontraremos un archivo dump como por ejemplo el siguiente sistema de archivos contiene un archivo dump

root@comanche /var 10:49:05 # ls -ltr /var/crash/127.0.0.1-2023-05-19-02\:20\:54/
total 2531548
-rw------- 1 root root    1065218 May 19 02:20 vmcore-dmesg.txt
-rw------- 1 root root 2591133181 May 19 02:21 vmcore
-rw------- 1 root root      97176 May 19 02:21 kexec-dmesg.log
root@comanche /var 10:49:06 # 

Para poder analizar el contenido de archivo debemos apoyarnos en un comando llamado crash, el cual analizará la información contenida y nos informará de una forma general lo que ha ocurrido o la causa del reinicio del servidor.

Ejecutamos la orden crash con los siguientes parámetros, la ruta absoluta del archivo vmlinux de nuestro kernel y la ruta del archivo vmcore que se generó en la caida.

 

[root@centos8 modules]# crash  /usr/lib/debug/lib/modules/4.18.0-348.2.1.el8_5.x86_64/vmlinux /root/127.0.0.1-2023-02-23-00\:19\:29/vmcore

crash 7.3.0-2.el8
Copyright (C) 2002-2021  Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
Copyright (C) 1999-2006  Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011, 2020-2021  NEC Corporation
Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions.  Enter "help copying" to see the conditions.
This program has absolutely no warranty.  Enter "help warranty" for details.
 
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...

WARNING: kernel relocated [584MB]: patching 102991 gdb minimal_symbol values

      KERNEL: /usr/lib/debug/lib/modules/4.18.0-348.2.1.el8_5.x86_64/vmlinux
    DUMPFILE: /root/127.0.0.1-2023-02-23-00:19:29/vmcore  [PARTIAL DUMP]
        CPUS: 4
        DATE: Thu Feb 23 00:19:25 -05 2023
      UPTIME: 02:17:24
LOAD AVERAGE: 16.84, 10.19, 5.88
       TASKS: 517
    NODENAME: comanche.unixpad.local
     RELEASE: 4.18.0-348.2.1.el8_5.x86_64
     VERSION: #1 SMP Tue Nov 16 14:42:35 UTC 2021
     MACHINE: x86_64  (2245 Mhz)
      MEMORY: 256 GB
       PANIC: "Kernel panic - not syncing: System is deadlocked on memory"
         PID: 26290
     COMMAND: "edb-postmaster"
        TASK: ffff99215685af80  [THREAD_INFO: ffff99215685af80]
         CPU: 0
       STATE: TASK_RUNNING (PANIC)

crash> 

Nos fijamos en el mensaje PANIC: “Kernel panic – not syncing: System is deadlocked on memory”. 

Problemas de memoria, tenemos un comando edb-postmaster que ha consumido la memoria.  Nótese que al ejecutar el comando crash, nos hemos quedado en un prompt para seguir indagando algunas cosas interesantes, podemos ejecutar el comando bt que nos genera un backtrace sobre lo que ha ocurrido.

crash> bt
PID: 26290  TASK: ffff99215685af80  CPU: 0   COMMAND: "edb-postmaster"
 #0 [ffffb4aca19638e8] machine_kexec at ffffffffa58641ce
 #1 [ffffb4aca1963940] __crash_kexec at ffffffffa599e05d
 #2 [ffffb4aca1963a08] panic at ffffffffa58ec227
 #3 [ffffb4aca1963a88] out_of_memory.cold.35 at ffffffffa5a7f0c0
 #4 [ffffb4aca1963ac8] __alloc_pages_slowpath at ffffffffa5ad51c5
 #5 [ffffb4aca1963bc0] __alloc_pages_nodemask at ffffffffa5ad558b
 #6 [ffffb4aca1963c20] pagecache_get_page at ffffffffa5a77fc5
 #7 [ffffb4aca1963c60] filemap_fault at ffffffffa5a79cfe
 #8 [ffffb4aca1963d40] __xfs_filemap_fault at ffffffffc05eb5fd [xfs]
 #9 [ffffb4aca1963d90] __do_fault at ffffffffa5ab00c8
#10 [ffffb4aca1963db0] do_fault at ffffffffa5ab5010
#11 [ffffb4aca1963de8] __handle_mm_fault at ffffffffa5ab79c5
#12 [ffffb4aca1963e98] handle_mm_fault at ffffffffa5ab7dce
#13 [ffffb4aca1963ec0] __do_page_fault at ffffffffa5875f5d
#14 [ffffb4aca1963f20] do_page_fault at ffffffffa5876267
#15 [ffffb4aca1963f50] page_fault at ffffffffa620111e
    RIP: 00007f796bb5b0f0  RSP: 00007ffeafa81328  RFLAGS: 00010293
    RAX: 0000001f20877734  RBX: 0000001f20854088  RCX: 0000000000000002
    RDX: 0000000000000002  RSI: 0000001f2085408c  RDI: 0000001f20877732
    RBP: 00007ffeafa81390   R8: 0000001f2084f588   R9: 0000000000000001
    R10: 0000000000000001  R11: 0000001f2085408c  R12: 0000000000000001
    R13: 0000001f2084f480  R14: 0000001f2085407c  R15: 0000000000000000
    ORIG_RAX: ffffffffffffffff  CS: 0033  SS: 002b
crash>

El proceso 26290 generó el problema. Ejecutemos el comando ps para ver los procesos que se ejecutaban en el momento de la caída.

crash> ps
   PID    PPID  CPU       TASK        ST  %MEM     VSZ    RSS  COMM
      0      0   0  ffffffffa6e18840  RU   0.0       0      0  [swapper/0]
      0      0   1  ffff98f88c882f80  RU   0.0       0      0  [swapper/1]
>     0      0   2  ffff98f88c8817c0  RU   0.0       0      0  [swapper/2]
>     0      0   3  ffff98f88c8a17c0  RU   0.0       0      0  [swapper/3]
      1      0   2  ffff98f88c83af80  UN   0.0  238456   2952  systemd
      2      0   0  ffff98f88c8397c0  IN   0.0       0      0  [kthreadd]
      3      2   0  ffff98f88c83df00  ID   0.0       0      0  [rcu_gp]
...
  25309   1311   0  ffff99263867af80  IN   0.0 162944944   2980  edb-postmaster
  25310   1311   1  ffff99263867c740  IN   0.0 162944944   2980  edb-postmaster
  25311   1311   0  ffff99289f6bc740  IN   0.0 162944944   2980  edb-postmaster
  25312   1311   0  ffff99289f6b8000  IN   0.0 162944944   2980  edb-postmaster
  25313   1311   3  ffff99289f6baf80  IN   0.0 162944944   2980  edb-postmaster
  25314   1311   1  ffff98f88c93af80  IN   0.0 162944944   2980  edb-postmaster
  25315   1311   0  ffff990c19334740  IN   0.0 162944944   2980  edb-postmaster
  25320   1311   0  ffff990e21e90000  IN   0.0 162944944   2976  edb-postmaster
  25328   1311   0  ffff99070b4e4740  IN   0.0 162944944   2976  edb-postmaster
  25475   1311   1  ffff990753395f00  IN   0.0 162944944   2976  edb-postmaster
  25578      2   1  ffff99194f374740  ID   0.0       0      0  [kworker/1:0]
  25579      2   0  ffff990c194b5f00  ID   0.0       0      0  [kworker/0:0]
> 26290   1311   0  ffff99215685af80  RU  48.4 299373152 130945452  edb-postmaster
  26352   1311   2  ffff99215685df00  IN   0.0 162944944   2976  edb-postmaster
  26370   1311   1  ffff9921568597c0  IN   0.0 162944944   2976  edb-postmaster
  26410   1311   2  ffff99055a424740  IN   0.0 162945016   3208  edb-postmaster
  26434   1311   2  ffff9918ea620000  IN   0.0 162944944   2976  edb-postmaster
crash>

Los procesos involucrados el sistema los marca con un caracter “>” , en este caso hubo tres procesos (dos de swap y el proceso edb-postmaster). Ahora ejecutamos el comando log y podemos ver mucho mas en detalle lo que ha ocurrido.

[ 8244.187090] Out of memory and no killable processes...
[ 8244.187092] Kernel panic - not syncing: System is deadlocked on memory
               
[ 8244.191426] CPU: 0 PID: 26290 Comm: edb-postmaster Kdump: loaded Not tainted 4.18.0-348.2.1.el8_5.x86_64 #1
[ 8244.193401] Hardware name: oVirt RHEL/RHEL-AV, BIOS 1.16.0-1.module_el8.7.0+1140+ff0772f9 04/01/2014
[ 8244.195347] Call Trace:
[ 8244.197271]  dump_stack+0x5c/0x80
[ 8244.199164]  panic+0xe7/0x2a9
[ 8244.201026]  out_of_memory.cold.35+0x5e/0x7e
[ 8244.202878]  __alloc_pages_slowpath+0xbe5/0xcd0
[ 8244.204698]  ? __switch_to_asm+0x41/0x70

Sólo pongo una porción de salida puesto que son miles de líneas las que se observan en la salida. Nos interesa conocer que el sistema se ha quedado sin memoria y que no tiene mas procesos que eliminar, por lo cual opta por ejecutar el reinicio del servidor.