触发 EC2 Linux 的 NMI Unknown 中断
发送一个诊断请求给 EC2, 触发 os 本身 NMI Unknown 事件,这个时间会触发 Kdump 记录当时的现场。
1
| aws ec2 send-diagnostic-interrupt --region cn-north-1 --instance-id i-********************
|
记录下来的现场文件保存在 /var/crash/
1 2 3 4 5 6 7
| [root@mysql 5.14.0-284.11.1.el9_2.x86_64]# ll /var/crash/ total 0 drwxr-xr-x. 2 root root 67 Jun 6 05:22 127.0.0.1-2023-06-06-05:22:11 drwxr-xr-x. 2 root root 67 Jun 6 08:58 127.0.0.1-2023-06-06-08:58:20 drwxr-xr-x. 2 root root 67 Jun 9 09:39 127.0.0.1-2023-06-09-09:39:56
|
使用Crash命令进行分析, 需要安装kernel-debug 和 kernel-debuginfo kernel-devel
1
| [root@mysql 5.14.0-284.11.1.el9_2.x86_64]# crash /usr/lib/debug/lib/modules/5.14.0-284.11.1.el9_2.x86_64/vmlinux /var/crash/127.0.0.1-2023-06-09-09\:39\:56/vmcore
|
相关文档:
New – Trigger a Kernel Panic to Diagnose Unresponsive EC2 Instances
发送诊断中断(适用于高级用户)
Cscope 查看内核源代码
1 2 3 4 5 6 7 8 9 10 11 12 13
| yum install -y yum-utils yum yum download --source kernel
rpm2cpio ./kernel-5.14.0-284.11.1.el9_2.src.rpm | cpio -div tar xf ./linux-5.14.0-284.11.1.el9_2.tar.xz
make cscope ARCH=x86
make tags ARCH=x86
cscope -d
|
Dracut 的使用和命令
1 2 3 4
| ]$ dracut -f -v --add-drivers "nvme ena" /boot/initramfs-$(uname -r).img $(uname -r)
]$ lsinitrd /boot/initramfs-$(uname -r).img | grep -E "nvme|ena"
|
安全软件引起的用户空间进程失去响应
Redhat关于这个问题的文档说明:
使用Ftrace的方法,和一部分命令的使用方法:
1
| [root@ip-172-31-51-167 ~]$ echo 'func fanotify_get_response +p' > /sys/kernel/debug/dynamic_debug/control
|
追踪这个系统调用, 并输出 callgraph.
内核的DynamicTracing, 这是一个古老的方式了, 出现在Kprobe之前。会直接将追踪的结果输出到dmesg中。
1 2 3 4 5 6 7 8 9 10 11 12
| [root@ip-172-31-51-167 ~]$ perf trace -s -p 2688 [root@ip-172-31-51-167 ~]$ cd /var/crash/127.0.0.1-2023-08-11-06:53:10 [root@ip-172-31-51-167 ~]$ crash /usr/lib/debug/lib/modules/6.1.34-59.116.amzn2023.x86_64/vmlinux vmcore [root@ip-172-31-51-167 127.0.0.1-2023-08-11-06:53:10]$ ll /var/crash total 0 drwxr-xr-x. 2 root root 67 Aug 10 05:52 127.0.0.1-2023-08-10-05:52:16 drwxr-xr-x. 2 root root 67 Aug 10 06:13 127.0.0.1-2023-08-10-06:13:44 drwxr-xr-x. 2 root root 67 Aug 11 05:45 127.0.0.1-2023-08-10-13:03:27 drwxr-xr-x. 2 root root 91 Aug 12 15:05 127.0.0.1-2023-08-11-04:57:13 drwxr-xr-x. 2 root root 67 Aug 11 08:41 127.0.0.1-2023-08-11-06:53:10 drwxr-xr-x. 2 root root 67 Aug 11 20:56 badstop drwxr-xr-x. 2 root root 41 Aug 11 20:46 crash
|
Grubby 命令简单的用法
设置内核参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| $ grubby --info=ALL
$ grubby --set-default-index=1
$ grubby --default-kernel
$ grubby --update-kernel=ALL --remove-args="systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M loglevel=8 crashkernel=512M"
$ grubby --update-kernel=ALL --args="systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M loglevel=8 crashkernel=512M"
$ grubby --update-kernel=/boot/vmlinuz-5.9.1-1.el8.elrepo.x86_64 --args=“systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M loglevel=8 crashkernel=512M”
[root@ip-172-31-0-170 ~]# sudo kdumpctl status kdump: Kdump is operational
[root@ip-172-31-0-170 ~]# sudo kdumpctl showmem kdump: Reserved 256MB memory for crash kernel
[root@ip-172-31-0-170 ~]# cat /proc/cmdline BOOT_IMAGE=(hd0,gpt1)/boot/vmlinuz-6.1.34-59.116.amzn2023.x86_64 root=UUID=483d7075-a0f8-4ba8-a951-a668fa079cac ro console=tty0 console=ttyS0,115200n8 nvme_core.io_timeout=42949672 95 rd.emergency=poweroff rd.shell=0 selinux=1 security=selinux quiet systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M loglevel=8 crashkernel=512M
|