linux 死机日志分析

系统出现死机,一般分为两种情况:一是硬件问题;二是软件问题。

一、硬件问题

可以考虑分析以下几点:

1、不要超频CPU,如果已经超频的先回复到原来的频率

虽然平时运行没有问题,但可能在高负载的使用中就会出现不可预料的故障了。特别是linux系统在某些应用上,是可以把硬件的性能发挥到极限的,但这样的硬件运行Windows可能是没有问题的。

2、确认电源供电充足

必须确保在高负载的状态下,电源可以满足负载。

3、使用memtest86检查内存状态

4、恢复BIOS到默认状态

对于服务器,可以使用自带的监测工具进行测试,也是一个不错的排错方法。

二、软件问题

如果已经基本排除硬件问题,那我们就必须考虑从软件上去获得死机状态的系统信息了。

1、运气足够好的话,系统死机不一定是完全死掉(此时键盘可能还能响应),那我们就可以使用Sysrq大法。

前提是我们必须先打开sysrq功能:

#echo "1" > /proc/sys/kernel/sysrq

#setterm -blank

这样,当系统出现问题的时候,我们可以使用:

引用

Alt+Sysrq-T 获得进程系统堆栈信息

Alt+Sysrq-M 获得内存分配信息

Alt+Sysrq-W 获得当前寄存器信息

更多的热键可以参考系统上的/usr/src/linux/Documentaion/sysrq.txt

其中,setterm -blank可以关闭字符下定时黑屏保护,方便记录屏幕信息。

2、为了让屏幕显示更多的内核调试信息,可以修改控制台的显示模式为80x25,在/boot/grub/menu.lst中对应的kernel一行最后,增加vga=0x305,如:

引用

kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root=/LABEL=/1 vga=0x305

3、万一键盘也不幸死掉了,那我们只能采用串口方式,把系统信息发送到另一台系统上,方法:

修改/boot/grub/menu.lst文件,在kernel一行最后增加核心参数"console=ttyS0 console=tty1",如:

引用

kernel /boot/grub/vmlinuz-2.4.21-9.30AXsmp ro root=/LABEL=/1 console=ttyS0 console=tty1

然后,修改/etc/sysconfig/syslog,加入klogd选项"-c 7",如:

引用

KLOGD_OPTIONS="-x -c 7"

重启服务器;进行测试:

1)使用串口直连线连接客户机和服务器,在客户机上运行:

cat /dev/ttyS0

服务器上运行:

echo hi > /dev/ttyS0

如果客户机有"hi"输出即可。

2)服务器上运行:

echo w > /proc/sysrq-trigger

看看客户机上是否有相应的内核信息输出

3)服务器上运行:

modprobe loop

看看客户机上是否有相应的内核信息输出

如果测试都通过的话,那么在客户机上运行:

cat /dev/ttyS0 | tee /tmp/result

当死机出现的时候,我们就可以从客户机上看到需要的内核信息了(查看/tmp/result)。

三、总结

一般造成Linux系统死机的原因有:

系统硬件问题(SCSI卡,主板,RAID卡,HBA卡,网卡,硬盘等)

外围硬件问题(网络等)

软件问题(系统、应用软件)

驱动bug(找新的驱动)

核心系统bug(到LKML看看,或更换核心再试)

系统设置(恢复到缺省状态,关闭防火墙等)

(0)

相关推荐

  • linux下删除7天前日志的代码(php+shell)

    PHP版本: 复制代码 代码如下: /** * 删除7天前的日志 * @param $logPath */ function del7daysAgoLog($logPath) { if(empty($logPath))return; $handle = opendir($logPath); while(($file = readdir($handle)) !== false){ $pos = strpos($file, '.log'); if ($pos !== false && (str

  • Linux下apache日志分析与状态查看方法

    假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] "GET /Public/Css/index.css HTTP/1.1″ 304 – "http://www.a.cn/common/index.php" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.3)" 问题1:在apachelog中找出访问次数最多的1

  • Linux日志式文件系统面面观

    文件系统是用来管理和组织保存在磁盘驱动器上的数据的系统软件,其实现了数据完整性的保 证,也就是保证写入磁盘的数据和随后读出的内容的一致性.除了保存以文件方式存储的数据以外,一个文件系统同样存储和管理关于文件和文件系统自身的一些重要信息(例如:日期时间.属主.访问权限.文件大小和存储位置等等).这些信息通常被称为元数据(metadata). 由于为了避免磁盘访问瓶颈效应,一般文件系统大都以异步方式工作,因此如果磁盘操作被突然中断可能导致数据被丢失.例如如果出现这种情况:如果当你处理一个在linux

  • Linux下Oracle归档日志自动清理脚本代码(sh)

    复制代码 代码如下: #!/bin/sh export BACK_DATE=`date +%Y%m%d` export BACKUP_PATH=/home/oracle/dbbak echo `mkdir -p ${BACKUP_PATH}/archivelog/${BACK_DATE}` rman msglog=$BACKUP_PATH/archivelog/${BACK_DATE}/arch_0_$BACK_DATE.log << EOF connect target /; delete

  • 简单高效:用Swatch做Linux日志分析

    日志文件是我们发现系统问题的重要参考信息. 大部分的系统服务出现问题时都会给syslogd(系统日志守护进程)发送消息. 然后用户发觉并根据错误提示信息采取行动. 然而对于1000行以上的日志文件, 我们必须使用日志检查工具节省时间和避免漏掉重要信息. Swatch从字面上可以简单理解为Watcher(守护者). 其它的日志分析软件定期地扫描日志文件, 向你报告系统已经发生的问题或者状况. Swatch程序不仅能够做这些, 而且它能够像Syslogd守护程序那样主动的扫描日志文件并对特定的日志消

  • linux自动清理日志脚本分享

    1.做自动部署系统时精简的一个脚本,主要功能是清理所有目录的日志 2.根据给定日志目录,删除时间 结合crontab进行清理日志,清理完成后,后在/var/log/deltelog/ 生成按照月的清理日志 3.扩展,因为脚本采用mtime(最后修改时间)进行删除,所以可以适用于删除过期备份等,不受文件名称的限制 shell小窍门 find –type f –print 时会根据换行或者空格来输出查找的文件,在不同的sh下有不同的反应,如果不做处理结合xargs 进行删除 更改操作,会有影响 所以

  • linux Nginx 日志脚本

    任务计划 crontab -l 1 15 * * * /home/dongnan/sh/split.sh >> /home/dongnan/sh/cron.log 2>& nginx 日志 ls /var/log/nginx/ 20130730-access.log.gz  20130801-access.log.gz  20130803-access.log.gz 20130730-error.log.gz   20130801-error.log.gz   20130803-

  • nginx日志分割 for linux

    使用方法,先将以下脚本保存为 cutlog.sh,放在/root 目录下,然后给予此脚本执行的权限 复制代码 代码如下: chmod +x cutlog.sh 然后使用crontab -e 将此脚本加入到计划任务中, 复制代码 代码如下: 00 00 * * * /bin/bash /root/cutlog.sh 让此脚本每天凌晨0点0分执行. 复制代码 代码如下: #!/bin/bash#function:cut nginx log files shell#设置您的网站访问日志保存的目录,我的

  • windows和linux安装mysql后启用日志管理功能的方法

    查看是否启用了日志 复制代码 代码如下: mysql>show variables like 'log_bin'; 怎样知道当前的日志 复制代码 代码如下: mysql> show master status; 展示二进制日志数目 复制代码 代码如下: mysql> show master logs; 看二进制日志文件用mysqlbinlog 复制代码 代码如下: shell>mysqlbinlog mail-bin.000001 或者 复制代码 代码如下: shell>my

  • linux系统中c++写日志文件功能分享

    简化了glog,只保留了写日志文件的功能,只是改写了linux版本,win版本未改写,可以用LOG(INFO)<< 输出日志也可用LOG_IF(INFO,condition)<<输出日志也可直接调用日志类Logger::GetInstance().Error 等方式写日志初始化时调用 InitLogging(argv[0],INFO,"./log/test");第一个参数是路径,第二个参数是最低日志级别,第三个参数表示日志文件的前缀和文件夹 FileHelper

随机推荐