除了上面 这种情况外,一些底层软件的 bug 也可能导致一些奇怪的死机问题。以前有个用户就因为莫名其妙的死机强制重启把 ext4 的分区给伤了。最后是sysreccd修复了,貌似是分区表部分损坏,死机时键鼠均无反应。一般来说,系统负载高导致的死机,最可怕键盘的就是键鼠都没反应了。
这时我们可以利用reisub,这个方法可以在各种情况下安全地重启计算机。在键盘上找到一个叫做“Sys Rq”的键,在台机的键盘上通常与 Prt Sc 共键,在笔记本可能在其他位置,如 Delete以台机为例,要使用这种方法需要按住 Alt-Print(Sys Rq),然后依次按下 reisub 这几个键,按完b系统就会重启。
其实Sys Rq是一种叫做系统请求的东西,按住 Alt-Print 的时候就相当于按住了 Sys Rq 键,这个时候输入的一切都会直接由 Linux 内核来处理,它可以进行许多低级 *** 作。
这个时候reisub中的每一个字母都是一个独立 *** 作,他们分别表示:unRaw 将键盘控制从 X Server 那里抢回tErminate 给所有进程发送 SIGTERM 信号,让他们自己解决善后kIll 给所有进程发送 SIGKILL 信号,强制他们马上关闭Sync 将所有数据同步至磁盘Unmount将所有分区挂载为只读模式reBoot重启。
如果问题能够再现,那么问题已经解决 80% 了。对于 *** 作系统核心而言,如果有问题的再现方法,那么可以说是已经解决 99% 了。经常遇到的问题是系统可以正常运行一段时间,然后死机。如果不好再现问题,那么只有根据死机现场遗留的东西来进行分析了。如果系统没有死干净,比如磁盘中断和文件系统是好的,那么也许能有日志信息保留在文件中,不过这样的好运气我是从来没有遇到过的。如果键盘中断还能响应 (按下Num Lock,可以看见键盘小灯亮灭),那么运气就算是足够好了,这时可以祭出 sysrq 大法,同时按下 Alt-Sysrq-T 获得进程系统堆栈信息,按下 Alt-Sysrq-M 获得内存分配信息,按下 Alt-Sysrq-W 获得当前寄存器信息。
linux/Documentation/sysrq.txt。另外,最好关闭终端的自动 blank 功能,这样系统死的时候至少能从屏幕上看到一些信息。设置方法是:
# echo 1 >/proc/sys/kernel/sysrq
# setterm -blank
这两个设置最好加到系统启动脚本中 (比如 /etc/rc.d/rc.local),保证每次启动都能得到运行。
如果很不幸,键盘也死悄悄了,(更为不幸的是,这种情况很常见),那么也不是只有等死一个办法,这时可以用串口终端 (serial console)将系统信息发送
到另一台系统上,这样可以通过对这些信息分析来定位问题。设置方法如下:
准备工作
1. 一台被监视的服务器,一台进行监视工作的PC。
2. 一根串口直连线。
配置
1. 在服务器上,加入一个新的 grub 项目,增加核心参数 "console=ttyS0 console=tty1",如:
kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root=LABEL=/1 console=ttyS0
console=tty1
2. 在服务器上,修改 /etc/sysconfig/syslog,加入 klogd 选项 "-c 7",保证更多内核信息得到输出。如:
KLOGD_OPTIONS="-x -c 7"
3. 重新启动服务器
4. 用串口直连线连接两台机器,测试:
1) 在PC上运行 "cat /dev/ttyS0",在服务器上运行 "echo hi >/dev/ttyS0",看在 PC 上是否有 "hi" 输出。
2) 在PC上运行 "cat /dev/ttyS0",在服务器上运行 "echo w >/proc/sysrq-trigger",看 PC 上是否有相应内核信息输出。
3) 在PC上运行 "cat /dev/ttyS0",在服务器上运行 "modprobe loop",看 PC 上是否有相应内核信息输出。
5. 如果测试通过,那么在 PC 上运行:cat /dev/ttyS0 | tee /tmp/result
另外,也可以用 Windows 超级终端获得串口信息。
that’s it.
此外,一些核心支持 LKCD, netdump 等调试功能,也可以一试。
剩下的,就只有靠经验和运气了,一般造成 Linux 系统死机的原因有:
系统硬件问题 (SCSI 卡,主板,RAID 卡,网卡,硬盘...)
外围硬件问题 (终端切换器,网络...)
软件问题
驱动 bug (去找更新的驱动试试)
核心系统 bug (去 LKML 上看看,或换个核心试试)
系统设置
解决办法:你提到的shutdown命令死机的问题,很多版本都有这个现象。Linux是企业级的系统,本身设置得非常严谨,简直一丝不苟,所以你必须要非常清楚明白地写清楚命令,才会得到你想要的结果。这里,我先更新解决办法:shutdown -h now 可以达到你要的关机效果。
进一步的详细解释:
shutdown命令可以安全地将系统关机。 有些用户会使用直接断掉电源的方式来关闭linux,
这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能
会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备。
而在系统关机前使用shutdown命令,系统管理员会通知所有登录的用户系统将要关闭。
并且login指令会被冻结,即新的用户不能再登录。直接关机或者延迟一定的时间才关机
都是可能的,还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕
决定的。这让像vi之类的程序有时间储存目前正在编辑的文档,而像处理邮件〔mail〕和
新闻〔news〕的程序则可以正常地离开等等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)