A. linux程序崩溃自动重启
1、如果发生重启前下载应用程序软件或运行程序软件,则可能是程序软件引起的重启,将程序软件卸载再重新安装即可,如果故障依旧则说明系统有错误。
2、开机按F8进入安全模式后再退出,再进入正常模式。也可用系统自带的系统还原功能进行还原,如果重启故障排除,则是系统文件受损造成的重启。
3、检查主板,主板老化、电容失效或爆浆、主板与机箱背板发生短路等均可引发重启,可将主板从机箱取出检查或测试,接着检查CPU风扇散热片的底部硅胶是否变干,如果变干则将CPU风扇上的硅胶清理干净,然后重新涂上好的硅胶即可。接着检查CPU的风扇转动,及CPU的温度是否正常。
B. 如何分析linux crash
如前文所述,当 linux 系统内核发生崩溃的时候,可以通过 kmp 等方式收集内核崩溃之前的内存,生成一个转储文件 vmcore。内核开发者通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码改进。那么 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。
使用 crash 的先决条件
由于 crash 用于调试内核崩溃的转储文件,因此使用 crash 需要依赖如下条件:
1. kernel 映像文件 vmlinux 在编译的时候必须指定了 -g 参数,即带有调试信息。
2. 需要有一个内存崩溃转储文件(例如 vmcore),或者可以通过 /dev/mem 或 /dev/crash 访问的实时系统内存。如果 crash 命令行没有指定转储文件,则 crash 默认使用实时系统内存,这时需要 root 权限。
3. crash 支持的平台处理器包括:x86, x86_64, ia64, ppc64, arm, s390, s390x ( 也有部分 crash 版本支持 Alpha 和 32-bit PowerPC,但是对于这两种平台的支持不保证长期维护 )。
4. crash 支持 2.2.5-15(含)以后的 Linux 内核版本。随着 Linux 内核的更新,crash 也在不断升级以适应新的内核。
crash 安装指南
要想使用 crash 调试内核转储文件,需要安装 crash 工具和内核调试信息包。不同的发行版安装包名称略有差异,这里仅列出 RHEL 和 SLES 发行版对应的安装包名称如下:
表 1. crash 工具和内核调试包系统版本crash 工具名称
内核调试信息包RHEL6.2
crashkernel-debuginfo-common
kernel-debuginfoSLES11SP2crashkernel-default-debuginfo
kernel-ppc64-debuginfo
以 RHEL 为例,安装 crash 及内核调试信息包的步骤如下:
rpm -ivh crash-5.1.8-1.el6.ppc64.rpm
rpm -ivh kernel-debuginfo-common-ppc64-2.6.32-220.el6.ppc64.rpm
rpm -ivh kernel-debuginfo-2.6.32-220.el6.ppc64.rpm启动 crash启动参数说明
使用 crash 调试转储文件,需要在命令行输入两个参数:debug kernel 和 mp file,其中 mp file 是内核转储文件的名称,debug kernel 是由内核调试信息包安装的,不同的发行版名称略有不同,以 RHEL 和 SLES 为例:
RHEL6.2:/usr/lib/debug/lib/moles/2.6.32-220.el6.ppc64/vmlinux
SLES11SP2:/usr/lib/debug/boot/vmlinux-3.0.13-0.27-ppc64.debug
使用 crash -h 或 man crash 可以查看 crash 支持的一系列选项,这里仅以常用的选项为例说明如下:
-h:打印帮助信息
-d:设置调试级别
-S:使用 /boot/System.map 作为默认的映射文件
-s:不显示版本、初始调试信息等,直接进入命令行
-i file:启动之后自动运行 file 中的命令,再接受用户输入
C. Linux安装autojump导致系统崩溃,为什么
系统环境变量坏了,建议直接重装
D. 如何修复Linux无法正常启动故障
没有操作系统能够确保100%可靠。终有一天,即使Linux也会无法启动。本文为你提供一些在Linux工作站无法正常启动时所采用的策略。
不管你多么喜爱你的Linux机器,有时候你都必须恢复你的系统。是的,即使一台Linux机器也可能遭受系统崩溃:不管是由于视频配置错误、内核更新出错、或是由于init脚本配置错误,这种情况都是必然的。我看到过大量这种情况——即使在我自己的机器上,大多数是由于X配置出错——这确实令人沮丧。
在我看来,重新安装系统并不是最佳救援计划。有时候,最佳救援计划甚至不需要从救援磁盘启动。本文将为如何避免系统崩溃提供一些提示和诀窍,帮助你建立恢复崩溃的Linux机器所需的工具。
使用正确的运行级别
安装好一个新的Linux系统后,我立即采取措施以确保灾难不会轻易发生。其中一个措施就是编辑系统的运行级别。运行级别告诉系统离采用引导过程还有多远。运行级别分为六个等级:
0级:停止(不设置initdefault)
1级:单用户模式
2级:多用户模式,没有NFS(与3级相同,如果你没有建立网络)
3级:完整的多用户模式
4级:不使用
5级:X11
6级:重新启动(不设置initdefault)
新型的Linux系统几乎总是默认使用运行级5(X11),表示系统在引导完成后,将会在图形登录界面处停止。在某物(或某人)使用X配置前,系统一切正常。
然后你必须找到一个登录方法。你可以按下[Ctrl][Alt][F7]进入一个基于文本的虚拟窗口,但为什么要这么麻烦呢?相反,我总是在/etc/inittab文件中将运行级更改为3级。你更改的代码为:
id:5:initdefault:
它被更改为:
id:3:initdefault:
当X出错时,这是一个非常简单的系统恢复方法。
多内核
另一个明显的磁盘恢复方法是总是安装一个正常运转的内核。我通常在一个通过yum更新的内核上工作。有时候,内核会出现一些错误,使得我的一台或几台机器无法启动。
为避免这种情况,我一直保证在机器上使用至少一个正常运行的内核。要解决这个问题,首先应在/etc/yum.conf文件中添加plugins=1,然后应用这段脚本(由RedHat的Jeremy Katz编写),并将它命名为n-installonly.py,保存在/usr/lib/yum-plugins文件中。你可以通过修改tookeep变量(默认为2)的方法更新系统所使用内核的数量。
知道系统上有一个正常运转的内核,你就可以进行安全升级。如果新内核出错,只需启动旧内核就可以解决新内核上的问题(不管是删除、重新编译还是升级)。
救援模式
如果你在使用Red Hat和LILO引导加载器,你就可以插入产品光盘1,并在引导提示符下输入Linuxrescue进入救援模式。启动机器后,你就会看到bash#提示符。在这个模式下,你可以使用许多工具。
如你所见,有检查硬盘完整性、修复硬盘、检查内核模块、装配设备、以及创建文件系统等的工具。此时是进行救援尝试的最佳时机(如果你使用的是一个Red Hat,或基于Red Hat的系统)。
另一个救援方法是进入单用户模式,这里你的计算机引导进入运行级1。系统装配你的本地文件系统,但不激活网络。你得到一个可用的系统维护外壳。要进入单用户模式,在LILO提示符下输入:
Linuxsingle
或
Linuxemergency
建立一张救援CD
如果你正在使用LILO引入加载器,可以使用一个叫做mkrescue的强大工具。这个工具一般用于创建引导软盘,但也可用来创建ISO。其用法如下。
如果你使用Mandriva:
mkrescue --iso --initrd /boot/initrd-KERNEL-NUMBER.img --
kernel /boot/vmlinuz-KERNEL-NUMBER
注意:这里的KERNEL-NUMBER指内核的版本号。
如果你不能确定内核的版本,可以用以下命令找到intrd和vmlinuz的号码:
uname –r
运行这个命令后,你就会在运行mkrescue命令的目录中发现一个rescue.iso文件。现在你可以用以下命令建立镜像:
首先,检查建立CD的设备号码:
cdrecord –scanbus
然后用以下命令建立镜像:
cdrecord dev=0,0,0 rescue.iso
注意:这里的dev=0,0,0是用上面的scanbus命令查出的号码。
如果你使用Slackware,使用这些步骤建立一张引导CD:
mkrescue –iso
注意:Slackware自动获知在ISO中放入何种内核。
然后,你可以用建立Mandriva镜像同样的方法建立镜像。
SystemRescueCD
SystemRescueCD是一个保存在可引导光盘上的Linux系统,用于在系统崩溃后修复系统和数据。它还可在计算机上方便地执行管理任务,如建立和编辑硬盘分区。它由许多系统实用工具(parted、partimage、fstools)和基本实用工具(编辑器、midnight commander文件管理器和网络工具)构成。
它使用起来非常简单。只需要从光盘启动你就可以执行一切操作,就像从硬盘启动一样。系统内核支持大多数重要的文件系统(ext2/ext3, reiserfs, reiser4, xfs, jfs, vfat, ntfs, iso9660)和网络(samba和nfs)。
SystemRescueCD可能是市面上最优秀的救援系统。你不仅可以从光盘上使用这种救援方法,还可以将这个救援系统放在U盘上使用。
要在一个U盘上建立一个SystemRescueCD,你需要大于256MB的磁盘空间。从Sourceforge下载iso镜像并把它烧制到光盘上。现在你必须在U盘上创建文件系统。使用dmesg命令找出U盘名称,然后用以下代码擦写U盘:
dd if=/dev/zero of=/dev/sda
这里的/dev/sda是U盘的名称。
现在在U盘上安装主引导记录:
install-mbr /dev/sda
或
install-mbr --force /dev/sda(如果命令出错)
现在建立分散分区:
parted /dev/sda
(parted) mkpartfs primary fat32 0 100% // use help or help mkpartfs command to see help
(parted) print // check if the write was ok
(parted) quit
现在已经建立好文件系统,然后将用SystemRescueCD镜像烧制的CD中的文件复制到U盘中。保证你复制的文件等级和CD上的相同。
现在,使得U盘可以用sysLinux命令启动:
sysLinux/dev/sda1
这里的/dev/sda1是磁盘的名称。
现在你已经建立了一个你可以整天随身携带的救援U盘。由于你使用Linux,你并不需要经常用到它。
最后总结
Linux是一个非常稳定的环境,但由于该系统中还有许多其它系统,它们可能会出现错误。虽然我们很容易会由于使用Linux而洋洋自得(因为它存在诸多优点),但了解如何拯救一个系统崩溃的机器也不失为一种明智的做法。
当然,不是世界上所有的救援系统都能100%地恢复你的系统,因此你可能希望考虑为你的Linux服务器和桌面系统实施一个灾难恢复计划。
E. 求助:linux程序崩溃了,但不知道问题在哪里
Linux程序崩溃,请查看对应的错误日志信息进行问题排查,如linux系统的请查看/var/log/message日志,如果是其它第三方程序的如tomcat,请到tomcat/logs路径中查看错误信息。
F. Linux 操作系统在什么情况下崩溃
1.一个死循环不大可能把linux搞崩溃,尤其是到2.4以后,内核都有相应的保护机制,多半情况下这种进程会被杀死的。当然,你可以试试提高进程的优先级(这种我没做过,不知道结果,请事先保存好数据,以免不必要的损失)
2.还有,大量地消耗系统内存。这方法也不能成功。
比如:
======================================
#BOF
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#define ONE_K (1024)
int main ()
{
char *some_memory;
int size_to_allocate = ONE_K;
int megs_obtained = 0;
int ks_obtained = 0;
while (1) {
for (ks_obtained = 0; ks_obtained < 1024; ks_obtained++) {
some_memory = (char*)malloc(size_to_allocate);
if (some_memory == NULL) exit (EXIT_FAILURE);
sprintf(some_memory, "Hello,World");
}
megs_obtained++;
printf("Now allocated %d Megabytes\n", megs_obtained);
}
exit(EXIT_SUCCESS);
}
#EOF
====================
运行之后,
.....
.....
Out of Memory:Killed process 2365
Killed
======================================
系统为了保护自己的安全运行,终止了这个危险的进程。
3.驱动程序出现问题,比如驱动有bug崩溃了,这时间系统就危险了,但现在的社区里面写的开源驱动大都能和内核很好地结合,bug也没抓得差不多了。(关于驱动程序,可以参看Minix作者写的操作系统原理那本书,作者分析,70%的系统崩溃是由于驱动程序引起的,所以minix采用了微内核设计,只把必要的几千行代码放在内核而剩下的都放到了用户层,他认为这样做能极大地提高系统的稳定性。关于微内核的优劣,不好评论,反正我了解一点,GNU中的一个项目是做一个叫做Hurd的微内枋系统,这个项目已经有好几年了,可以去www.gnu.org找相应的文档。
4.其它。(不知道了)