Linux死机解决办法

来源:互联网 发布:软件测试生命周期模型 编辑:程序博客网 时间:2024/04/27 15:17

http://www.openswc.com/forum.php?mod=viewthread&tid=408


不建议长按 Power 按键强制关机,有可能损坏硬件或者丢失数据,甚至导致磁盘坏道!

Linux 内核虽然号称“不死族”,几乎不会崩溃或者死机,但是特殊情况下,还是有一定几率会宕机的。因为 Linux 广泛用于生产环境,所以每一次宕机都会引起相当大的损失。它 Uptime 达到上百天也许你习以为常,但是只要 Down 十几秒,就会立即急的满头大汗。真的很难以想象证交所宕机会怎么样,也许全国股民会闹翻天。所以我们需要一些小技巧来查找死机的原因,从而避免死机或者内核崩溃。(话说 windows 天天蓝屏也没感觉呀 :-o 难道已经麻木了 :oops: )
  请注意:以下方法可能不适用于 Server,因为桌面环境和 Server 还是有很大区别的。
  X Crash
  事实上 Linux 内核很少出错,平常我们所遇到的“死机”都是 X 无响应造成的错觉。那 X 没响应了应该怎么处理呢?

  通常套路是 Ctrl + Alt +F7 (F8) 切换到某个 tty,然后用 root 登陆,执行 top 查看吃资源最多的程序,然后使用 pkill/kill/killall 等命令杀死该程序。或使用组合键 Ctrl + Alt + Backspace重启 X (黑日白月注:这个快捷键组合在最新的 Ubuntu 和 Fedora 中关闭)。

  如果偶遇切换 tty 失败或者没响应,可以试着使用 SSH 登陆此电脑,然后再杀死程序。也许只是 X 不响应,而内核和 SSH daemon 仍然工作,故此可以实施此法。

  arch 配置 SSH daemon

  万一 X 不给力,各种方法试了无效,又没有办法通过 SSH 登陆到此 pc,那怎么办呢?别着急,我们还有万能的 “reisub” 大法。不过在启用前先要激活内核 sysrq 功能 (via) 。系统启动时执行:echo “1” > /proc/sys/Kernel/sysrq 或者修改 /etc/sysctl.conf 文件,设置 Kernel.sysrq = 1。系统异常时依次按下 Alt+sysrq+{reisub} ,然后系统会自动重启。(有关 sysrq 请看:Linux 死机了怎么办?)

  不建议长按 Power 按键强制关机,有可能损坏硬件或者丢失数据,甚至导致磁盘坏道!

  X 崩溃而内核完好

  常见的症状有:程序无响应,花屏,鼠标移动指针无动作,键盘输入没有识别等。但后台的音乐可以正常播放,或者键盘 Caps Lock/Num Lock/Scroll Lock 按键按后对应 LED 可以正常亮灭。遇到此种情况可以使用上述方法重启 X 或者电脑即可恢复正常。

  Application Crash

  这个比较常见,但是也是相当难解决的。因为 Linux 上的应用软件大部分都是开源的,所以可能没有超高的稳定性。也许由于库的缺少或者版本错误,或者代码的 Bug,都有可能导致程序出现异常。

  一般遇到这种问题,建议检查配置文件是否正确,对配置文件的错误修改可能导致程序的运行失败。如果您确信配置文件没有错误但是程序仍然异常,可以尝试把配置文件删除(注意备份!),然后再次打开软件尝试。通常程序的配置文件在:

  ● ~/.[APPNAME]
  ● ~/.config/[APPNAME]
  ● /etc/[APPNAME].conf

  或者有可能是库的错误,您可以在终端输入程序名或者程序路径运行程序,根据终端的提示信息除错。由于导致程序崩溃的可能性多种多样,在此不能一一列举,所以建议您根据出错信息去 google 搜索并找到解决方案。

  Kernel Panic

  X 的问题还好办,可是如果 RPWT 碰到 Kernel Panic,那可真是上天无路入地无门,撞墙的心都有 :evil: 。

  一般引起 Kernel Panic 的原因很多,但是都比较罕见。例如硬件问题 (irq confilct, bad block, high temperature),软件问题(错误的 mod,内核的 Bug),或者文件系统不支持(没有内建 ext4 支持却挂载 ext4 的 root 分区),硬件的变动(如添加/更换内存,不支持架构的cpu),错误的驱动。

  Kernel Panic 的表现形式也是多种多样:启动失败,不正常的长时间 io 操作,键盘灯的不正常频闪,wireless 等指示灯错误闪烁,无响应(请区别 xorg crash 情况),彻底锁死,黑屏,reisub 大法不灵 等等。

Linux死机了怎么办
使用电脑死机是很正常的事,如果系统负载过大,那么程序不能及时响应,很容易死机的。对于个人用户来说,没什么大 不了的,我强行关机再重启就解决问题了,但是如果是在服务器上呢,且不说服务器需要全天候工作提供服务,不能停止,更重要的是数据的安全,强行关机的话未同步的数据就会丢失,这是不允许出现的情况,那要怎么办呢?

如果是在图形界面下死机的话,不要再依赖任何图形界面的工具,那样只会适得其反,可以先试试文字界面,按ctrl+alt+f2(F1-F6一般都可以),会切换到另外一个虚拟终端,需要一个账号来登入,这时键盘响应可能非常慢,但是是可以响应的,进入后打top命令看一下进程,等这个表刷那么一两次,就可以确定占用资源比较大的进程了,把它kill掉,这样可以解决相当一部分问题。

但是有的时候是比较底层的软件出现问题,那这个方法就不适用了,但是这就引出了这篇文章要说的强强的方法。reisub方法,说具体一点,是一种系统请求,直接交给内核处理。键盘上一般都有一个键,SysRq,和PrintScreen在一个键位上,这就是系统请求的键。这个方法可以在死机的情况下安全的重启计算机,数据不会丢失。

具体操作是,按住Alt+SysRq,再依次按下reisub几个键,按完b系统就会重启。

下面解释一下这个方法:其实 Sys Rq 是一种叫做系统请求的东西,按住 Alt-Print 的时候就相当于按住了 Sys Rq 键,这个时候输入的一切都会直接由 Linux 内核来处理,它可以进行许多低级操作。这个时候 reisub 中的每一个字母都是一个独立操作,他们分别表示:

unRaw 将键盘控制从 X Server 那里抢回来
tErminate 给所有进程发送 SIGTERM 信号,让他们自己解决善后
kIll 给所有进程发送 SIGKILL 信号,强制他们马上关闭
Sync 将所有数据同步至磁盘
Unmount 将所有分区挂载为只读模式
reBoot 重启

这里有个问题要注意一下,最好不要快速连续地按下这几个键,要有间隔,大概是估计每个间隔10秒左右,因为每一步操作都需要时间,而且s键之后因为同步数据比较慢,可以停20秒。

最后一个问题是怎么记住这个方法呢,当然记住了上面说的每一步操作的也可以记住,但是这里有个比较好一点的方法,那就是reisub正好是busier反着写的顺序,而busier这么好记,正好还有系统很繁忙的意思,不错。

这样的话在对付linux死机的时候又多了一个杀手锏。