Kernel panic是内核错误,是系统内核遇到无法处理的致命错误时才会产生的异常,一般长这样:

Kernel panic - not syncing: Fatal exception
........其它错误日志........

除此之外,还有以下几种常见的:

Kernel Panic - not syncing:Attempted to kill init !
Kernel panic - not syncing: Out of memory and no killable processes
Kernal Panic - Not syncing : VFS: unable to mount root fs on unknown-block (0,0)
kernel panic - not syncing: Attempted to kill the idle task!
kernel panic - not syncing: killing interrupt handler!    

一旦发生kernel panic 只能重启服务器,可以通过以下两种方式产生:

1. 通过SysRq产生kernel panic

SysRq是magic SysRq key的简写,只要内核没挂,可以通过组合键来完成预先定义的系统操作。从而保证磁盘数据安全,避免数据丢失和文件系统检查,还可以收集CPU 内存和进程等系统信息,或者执行重新挂载文件系统、强制注销,关闭重启系统等操作,通常通过 Alt + SysRq(也就是print screen) + Command Key来执行,需要root权限,命令:

echo c > /proc/sysrq-trigger

'c' 是预定义的SysRq功能之一,触发Crashdump,产生kernel panic

如果是非root用户,需要打开sysrq功能:

echo 1 > /proc/sys/kernel/sysrq

或者:

sysctl -w kernel.sysrq=1 

2. 调用内核的panic()函数产生kernel panic

需要root权限,需要gcc、make和内核头文件:

      
yum install -y kernel-devel kernel-headers gcc make

创建软链接:

unlink  /lib/modules/`uname -r`/build
ln -s /usr/src/kernels/`uname -r`/ /lib/modules/`uname -r`/build 

然后通过下面命令产生kernel panic:

mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko

以上命令编译一个调用了panic()函数的内核模块,并加载产生kenel panic,提醒下:不要在生产服务器上玩!!!

参考文章:

http://blog.csdn.net/maimang1001/article/details/19573487
https://unix.stackexchange.com/questions/66197/how-to-cause-kernel-panic-with-a-single-command