死机啦?咋整,强制关机?也许,我们不用强制关机也可以解决哦.奶牛看网上搞服务器的大牛分享的一篇解决方案很不错.今天也给大家介绍下.
如果Linux死机了,首先我们要看桌面的反应,鼠标还动不动,键盘还能用否,如果cpu的灯一直在闪动表示正忙,估计一般没有太大问题,可以救的.ctrl+alt+F1(或F2~F6)中任意一个都可以的,系统可能反应很慢,不过应该可以进去的,然后登陆,输入用户名跟密码,然后使用top察看占用cpu最大的程序,q退出,记下程序的pid,kill pid一般就可以结束进程了.当然如果没有反应也不要着急,试试 kill 9 pid.如果还是不ok,那么只有用杀手锏Sys Rq来解决了.
SysRq 经常被称为 Magic System Request,它被定义为一系列按键组合。之所以说它神奇,是因为它在系统挂起,大多数服务已无法响应的情况下,还能通过按键组合来完成一系列预先定义 的系统操作。通过它,不但可以在保证磁盘数据安全的情况下重启一台挂起的服务器,避免数据丢失和重启后长时间的文件系统检查,还可以收集包括系统内存使 用,CPU 任务处理,进程运行状态等系统运行信息,甚至还可能在无需重启的情况下挽回一台已经停止响应的服务器。那么SysRq在哪里呢?一般的键盘上sys rq跟print screen是同一个按键,当然,键盘不同,可能分布也不相同.
大部分内核默认都是支持Sys Rq救援的,但是默认都没有开启,我们需要手动来开启.
sudo vim /etc/sysctl.conf
设置kernel.sysrq = 1启用Sys Rq救援
重启系统即可生效.如果想即时生效的话也是有办法的.
#echo "1" > /proc/sys/kernel/sysrq
启用之后我们就可以使用了.当然还是离不开tty.不过如果你是桌面系统,崩溃的时候也是可以直接用的哦,最常用的就是REISUB.这个可以让你在不丢失资料的情况下安全重启.
R – 把键盘设置为 ASCII 模式
SysRq: Keyboard mode set to XLATE |
有关键盘工作模式,请参考资料中的
kbd_mode
手册。
E – 向除 init 以外所有进程发送 SIGTERM 信号
SysRq: Terminate All Tasks |
因为 syslogd 本身也被结束,所以 SysRq 也许不会被记录下来。但是查看 /var/log/messages 会看到类似下面的消息:
exiting on signal 15(SIGTERM) |
I – 向除 init 以外所有进程发送 SIGKILL 信号
与 E 类似,因为 syslogd 本身也被结束,除非 netconsole 或串口记录已打开,否则连上面的信息都无法捕捉。同时,因为 SIGKILL 是不可捕获的信号,/var/log/messages 里面也不会留下任何线索。
S – 磁盘缓冲区同步
SysRq : Emergency Sync
Emergency Sync complete |
该操作会把磁盘缓冲区的数据回写,以防止数据丢失,通常会有一定延时。在能看到输出的情况下,请等到 ” Emergency Sync complete ” 过后再继续后续操作。否则,等十秒钟左右,再进行后续 SysRq 操作。
U – 重新挂载为只读模式
SysRq : Emergency Remount R/O
Emergency Remount complete |
该操作会把磁盘重挂载为只读模式,以防止数据的损坏。与 S 类似,该操作通常也有一定延时。请等到 ” Emergency Remount complete ” 出现过后再进行后续操作,或者等候十秒钟再进行后续 SysRq 操作。
B – 立即重启系统
该操作会立即重启系统,比想象中要快。
如果你记不住也没有关系,在tty下可以通过alt+sys rq+H来察看帮助信息哦~~~而且都很明确.其实刚才那个reisub是busier的倒写,busier就是busy的比较级,你懂的.R-E-I-S-U-B 这个序列的推荐使用方式是:R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B,而不是一气呵成地按下这六个键哦.
其实呢,sysrq是通过向/proc/sysrq-trigger发送信号来实现的.在tty下用
echo “ ? ” > /proc/sysrq-trigger
可以看到alt+sysrq+h的结果哦~~~
更多更详细的介绍可以看文章<利用 SysRq 键排除和诊断系统故障>