GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan kdump untuk Analisis Kernel Crash Linux

Kdump adalah utilitas yang digunakan untuk menangkap dump inti sistem jika terjadi kerusakan sistem.

Core dump yang ditangkap ini nantinya dapat digunakan untuk menganalisis penyebab pasti kegagalan sistem dan menerapkan perbaikan yang diperlukan untuk mencegah error di masa mendatang.

Kdump mencadangkan sebagian kecil memori untuk kernel sekunder yang disebut crashkernel.

Kernel sekunder atau kerusakan ini digunakan untuk menangkap gambar dump inti setiap kali sistem mogok.

1. Instal Alat Kdump

Pertama, instal kdump, yang merupakan bagian dari paket kexec-tools.

# yum install kexec-tools

2. Setel crashkernel di grub.conf

Setelah paket terinstal, edit file /boot/grub/grub.conf dan atur jumlah memori yang akan dicadangkan untuk kernel crash kdump.

Anda dapat mengedit /boot/grub/grub.conf untuk nilai crashkernel dan menyetelnya ke nilai otomatis atau yang ditentukan pengguna. Disarankan untuk menggunakan minimum 128M untuk mesin dengan memori 2G atau lebih tinggi.

Pada contoh berikut, cari baris yang dimulai dengan “kernel”, yang disetel ke “crashkernel=auto”.

# vi /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-419.el6.x86_64)
  root (hd0,0)
  kernel /vmlinuz-2.6.32-419.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
  initrd /initramfs-2.6.32-419.el6.x86_64.img

3. Konfigurasikan Lokasi Pembuangan

Setelah kernel crash, core dump dapat ditangkap ke sistem file lokal atau sistem file jarak jauh (NFS) berdasarkan pengaturan yang ditentukan di /etc/kdump.conf (dalam sistem operasi SLES jalurnya adalah /etc/sysconfig/kdump).

File ini dibuat secara otomatis ketika paket kexec-tools diinstal.

Semua entri dalam file ini akan dikomentari secara default. Anda dapat membatalkan komentar yang diperlukan untuk opsi terbaik Anda.

# vi /etc/kdump.conf
#raw /dev/sda5
#ext4 /dev/sda3
#ext4 LABEL=/boot
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
#net my.server.com:/export/tmp
#net [email protected]
path /var/crash
core_collector makedumpfile -c --message-level 1 -d 31
#core_collector scp
#core_collector cp --sparse=always
#extra_bins /bin/cp
#link_delay 60
#kdump_post /var/crash/scripts/kdump-post.sh
#extra_bins /usr/bin/lftp
#disk_timeout 30
#extra_modules gfs2
#options modulename options
#default shell
#debug_mem_level 0
#force_rebuild 1
#sshkey /root/.ssh/kdump_id_rsa

Dalam file di atas:

  • Untuk menulis dump ke perangkat mentah, Anda dapat menghapus komentar "raw /dev/sda5" dan mengubahnya untuk menunjuk ke lokasi dump yang benar.
  • Jika Anda ingin mengubah jalur lokasi dump, batalkan komentar dan ubah “path /var/crash” untuk menunjuk ke lokasi baru.
  • Untuk NFS, Anda dapat membatalkan komentar “#net my.server.com:/export/tmp” dan arahkan ke lokasi server NFS saat ini.

4. Konfigurasikan Kolektor Inti

Langkah selanjutnya adalah mengkonfigurasi kolektor inti di file konfigurasi Kdump. Penting untuk mengompresi data yang diambil dan memfilter semua informasi yang tidak perlu dari file inti yang diambil.

Untuk mengaktifkan kolektor inti, batalkan komentar pada baris berikut yang dimulai dengan core_collector.

core_collector makedumpfile -c --message-level 1 -d 31
  • makedumpfile yang ditentukan dalam core_collector sebenarnya membuat DUMPFILE kecil dengan mengompresi data.
  • makedumpfile menyediakan dua format DUMPFILE (format ELF dan format terkompresi kdump).
  • Secara default, makedumpfile membuat DUMPFILE dalam format terkompresi kdump.
  • Format terkompresi kdump hanya dapat dibaca dengan utilitas mogok, dan dapat lebih kecil dari format ELF karena dukungan kompresi.
  • Format ELF dapat dibaca dengan GDB dan utilitas mogok.
  • -c untuk mengompresi data dump per halaman
  • -d adalah jumlah halaman yang tidak perlu dan dapat diabaikan.

Jika Anda menghapus komentar pada baris #default shell maka shell akan dipanggil jika kdump gagal mengumpulkan inti. Kemudian administrator dapat secara manual mengambil core dump menggunakan perintah makedumpfile.

5. Mulai ulang Layanan kdump

Setelah kdump dikonfigurasi, restart layanan kdump,

# service kdump restart
Stopping kdump:   [  OK  ]
Starting kdump:   [  OK  ]

# service kdump status
Kdump is operational

Jika Anda memiliki masalah dalam memulai layanan, maka modul kdump atau parameter crashkernel belum diatur dengan benar. Jadi, verifikasi /proc/cmdline dan pastikan itu mencerminkan untuk menyertakan nilai crashkernel.

6. Memicu Pembuangan Inti Secara Manual

Anda dapat memicu dump inti secara manual menggunakan perintah berikut:

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

Server akan reboot sendiri dan crash dump akan dibuat.

7. Lihat File Inti

Setelah server di-boot ulang, Anda akan melihat file inti dibuat di bawah /var/crash berdasarkan lokasi yang ditentukan di /var/crash.

Anda akan melihat file vmcore dan vmcore-dmseg.txt:

# ls -lR /var/crash
drwxr-xr-x. 2 root root 4096 Mar 26 11:06 127.0.0.1-2014-03-26-11:06:43

/var/crash/127.0.0.1-2014-03-26-11:06:43:
-rw-------. 1 root root 33595159 Mar 26 11:06 vmcore
-rw-r--r--. 1 root root    79498 Mar 26 11:06 vmcore-dmesg.txt

8. Analisis Kdump menggunakan crash

Utilitas kerusakan digunakan untuk menganalisis file inti yang diambil oleh kdump.

Ini juga dapat digunakan untuk menganalisis file inti yang dibuat oleh utilitas dump lain seperti netdump, diskdump, xendump.

Anda perlu memastikan paket “kernel-debuginfo” ada dan berada pada level yang sama dengan kernel.

Luncurkan alat crash seperti yang ditunjukkan di bawah ini. Setelah Anda perintah ini, Anda akan mendapatkan prompt uang tunai, di mana Anda dapat menjalankan perintah crash:

# crash /var/crash/127.0.0.1-2014-03-26-12\:24\:39/vmcore /usr/lib/debug/lib/modules/`uname –r`/vmlinux

crash>

9. Lihat Proses saat Sistem Rusak

Jalankan perintah ps pada prompt crash, yang akan menampilkan semua proses yang berjalan ketika sistem crash.

crash> ps
   PID    PPID  CPU       TASK        ST  %MEM     VSZ    RSS  COMM
      0      0   0  ffffffff81a8d020  RU   0.0       0      0  [swapper]
      1      0   0  ffff88013e7db500  IN   0.0   19356   1544  init
      2      0   0  ffff88013e7daaa0  IN   0.0       0      0  [kthreadd]
      3      2   0  ffff88013e7da040  IN   0.0       0      0  [migration/0]
      4      2   0  ffff88013e7e9540  IN   0.0       0      0  [ksoftirqd/0]
      7      2   0  ffff88013dc19500  IN   0.0       0      0  [events/0]

10. Lihat ruang Swap saat Sistem Rusak

Jalankan perintah swap pada prompt crash, yang akan menampilkan penggunaan ruang swap saat sistem mogok.

crash> swap
FILENAME           TYPE         SIZE      USED   PCT  PRIORITY
/dm-1            PARTITION    2064376k       0k   0%     -1

11. Lihat IPCS saat Sistem Rusak

Jalankan perintah ipcs pada prompt kerusakan, yang akan menampilkan penggunaan memori bersama saat sistem mogok.

crash> ipcs
SHMID_KERNEL     KEY      SHMID      UID   PERMS BYTES      NATTCH STATUS
(none allocated)

SEM_ARRAY        KEY      SEMID      UID   PERMS NSEMS
ffff8801394c0990 00000000 0          0     600   1
ffff880138f09bd0 00000000 65537      0     600   1

MSG_QUEUE        KEY      MSQID      UID   PERMS USED-BYTES   MESSAGES
(none allocated)

12. Lihat IRQ saat Sistem Rusak

Jalankan perintah irq pada prompt kerusakan, yang akan menampilkan statistik IRQ saat sistem mogok.

crash> irq -s
           CPU0
  0:        149  IO-APIC-edge     timer
  1:        453  IO-APIC-edge     i8042
  7:          0  IO-APIC-edge     parport0
  8:          0  IO-APIC-edge     rtc0
  9:          0  IO-APIC-fasteoi  acpi
 12:        111  IO-APIC-edge     i8042
 14:        108  IO-APIC-edge     ata_piix
 .
 .

vtop – Perintah ini menerjemahkan alamat virtual pengguna atau kernel ke alamat fisiknya.
foreach – Perintah ini menampilkan data untuk beberapa tugas dalam sistem
waitq – Perintah ini menampilkan semua tugas yang diantrekan pada antrian tunggu.

13. Lihat Memori Virtual saat Sistem Rusak

Jalankan perintah vm pada prompt kerusakan, yang akan menampilkan penggunaan memori virtual saat sistem mogok.

crash> vm
PID: 5210   TASK: ffff8801396f6aa0  CPU: 0   COMMAND: "bash"
       MM              		 PGD          RSS    TOTAL_VM
ffff88013975d880  ffff88013a0c5000  1808k   108340k
      VMA           START       END     FLAGS FILE
ffff88013a0c4ed0     400000     4d4000 8001875 /bin/bash
ffff88013cd63210 3804800000 3804820000 8000875 /lib64/ld-2.12.so
ffff880138cf8ed0 3804c00000 3804c02000 8000075 /lib64/libdl-2.12.so

14. Lihat File yang Terbuka saat Sistem Rusak

Jalankan perintah file pada prompt kerusakan, yang akan menampilkan file yang terbuka saat sistem macet.

crash> files
PID: 5210   TASK: ffff8801396f6aa0  CPU: 0   COMMAND: "bash"
ROOT: /    CWD: /root
 FD       FILE            DENTRY           INODE       TYPE PATH
  0 ffff88013cf76d40 ffff88013a836480 ffff880139b70d48 CHR  /tty1
  1 ffff88013c4a5d80 ffff88013c90a440 ffff880135992308 REG  /proc/sysrq-trigger
255 ffff88013cf76d40 ffff88013a836480 ffff880139b70d48 CHR  /tty1
..

15. Lihat Informasi Sistem saat Sistem Rusak

Jalankan perintah sys pada prompt crash, yang akan menampilkan informasi sistem ketika sistem crash.

crash> sys
      KERNEL: /usr/lib/debug/lib/modules/2.6.32-431.5.1.el6.x86_64/vmlinux
    DUMPFILE: /var/crash/127.0.0.1-2014-03-26-12:24:39/vmcore  [PARTIAL DUMP]
        CPUS: 1
        DATE: Wed Mar 26 12:24:36 2014
      UPTIME: 00:01:32
LOAD AVERAGE: 0.17, 0.09, 0.03
       TASKS: 159
    NODENAME: elserver1.abc.com
     RELEASE: 2.6.32-431.5.1.el6.x86_64
     VERSION: #1 SMP Fri Jan 10 14:46:43 EST 2014
     MACHINE: x86_64  (2132 Mhz)
      MEMORY: 4 GB
       PANIC: "Oops: 0002 [#1] SMP " (check log for details)

Linux
  1. Bagaimana saya menggunakan cron di Linux

  2. Cara menggunakan FIND di Linux

  3. Linux – Bagaimana Cara Menggunakan Ruang Swap Untuk Keadaan Darurat Saja?

  1. Cara menggunakan BusyBox di Linux

  2. Cara menggunakan rsync lanjutan untuk cadangan Linux besar

  3. Cara menggunakan systemd-nspawn untuk pemulihan sistem Linux

  1. Bagaimana saya menggunakan pengaturan aksesibilitas Linux

  2. Cara Menggunakan Unzip di Linux

  3. Cara menggunakan Perintah Su di Linux