Linux使用shutdown -r now 或者 reboot、init 6 命令无法重启时使用以下两条命令可强制重启:

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

事件回顾,平安夜正在床上躺着刷剧,突然收到报警,一台k8s得node节点出现问题

立马开机登录阿里云vnc控制台查看服务器情况 输入任何命令报错都是

fork failed cannot allocate memory

出现了一个奇怪得现象k8s组件calico异常,服务器ssh也进不去. pod也没有飘逸到其他节点上,立马强制重启, 过了5分钟左右在VNC后台看服务器还是没有重启信号,立马强制重启一波,shutdown -r now 或者 reboot、init 6 命令无法都无法重启 拷贝命令进控制台

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

服务器重启 各个服务也启动来了

查看服务器日志,查找报错原因,及分析,查看无特殊报错,修改内核参数观察

vi /etc/sysctl.d/99-sysctl.conf
kernel.pid_max = 1000000
vm.overcommit_memory = 1

sysctl -p

后记

1./proc/sys/kernel/sysrq

向 sysrq 文件中写入1是为了开启 SysRq 功能。根据 linux/Documentations/sysrq.txt 中所说:SysRq 代表的是 Magic System Request Key。开启了这个功能以后,只要内核没有挂掉,它就会响应你要求的任何操作。但是这需要内核支持(CONFIG_MAGIC_SYSRQ 选项)。向 /proc/sys/kernel/sysrq 中写入0是关闭 SysRq 功能,写入1是开启,其他选项请参考 sysrq.txt。

2./proc/sysrq-trigger

立即重新启动计算机:

echo "b" > /proc/sysrq-trigger

立即关闭计算机:

echo "o" > /proc/sysrq-trigger

导出内存信息:

echo "m" > /proc/sysrq-trigger

导出所有标志位和寄存器信息:

echo "p" > /proc/sysrq-trigger

导出线程状态信息:

echo "t" > /proc/sysrq-trigger

使系统崩溃:

echo "c" > /proc/sysrq-trigger

同步连接系统磁盘:

echo "s" > /proc/sysrq-trigger

重新挂载所有文件系统为只读:

echo "u" > /proc/sysrq-trigger

此外还有两个,类似于强制注销的功能:

‘e’ — 使用 SIGTERM 信号杀死除 init 进程外所有进程

‘i’ — 使用 SIGKILL 信号杀死除 init 进程外所有进程