Liunx 系统死机现象分析

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

  一、硬件问题

  可以考虑分析以下几点:

  1、不要超频CPU

(1)查询CPU频率

# cat /proc/cpuinfo                       查看CPU主频是 3G                                                                              model name : Intel(R) Xeon(R) CPU X5450 @ 3.00GHz                                                                  stepping : 10                                                                                                                                              cpu MHz : 3000.055                                                                                                                                   之后可以通过top,按P实时查看CPU使用情况

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

(2)CPU负载的排查手段

  查看系统负载的工具:uptime,w,都能查看系统负载,系统平均负载是处于运行或不可打扰状态的进程的平均数,

  可运行:运行态,占用CPU,或就绪态,等待CPU调度。

  不可打扰:阻塞,正在等待I/O

使用uptime查看系统负载

#uptime

19:26:17up49days,7:34,1user, load average:0.67,0.51,0.41

这里我们关注的是最后三列,即系统1分钟、5分钟、15分钟内的平均负载,判断一个系统负载是否偏高需要计算单核CPU的平均负载,等于这里uptime命令显示的系统平均负载 / CPU核数,一般以0.7为比较合适的值。偏高说明有比较多的进程在等待使用CPU资源。

  2、确认电源供电充足

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

  3、检查内存状态


  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"


三、死机时,总结下尝试的解决方法

1. 进入TTY终端

a. Ctrl+Alt+Fn(F1-F6)进入TTY1终端字符界面, 输入用户名和密码以登录

b. free命令可查看内存使用情况

1   [root@rhel7 ~]# free -m

2   total        used        free      shared  buff/cache   available

3  Mem:           3778         171        3411           8         194        3399

4  Swap:          3967           0        3967

c. 开始清理内存(需要root权限)

1  sync 

2  echo 1 > /proc/sys/vm/drop_caches

3  echo 2 > /proc/sys/vm/drop_caches

4  echo 3 > /proc/sys/vm/drop_caches

sync的作用是将所有正在内存中的缓冲区写到磁盘中,其中包括已经修改的文件inode、已延迟的块I/O以及读写映射文件,从而确保文件系统的完整性。

注释:1:释放页缓存 2:释放dentries和inodes 3:释放所有缓存

d.top查看CPU使用情况

进入后用top命令查看进程表,等待进程信息表刷新一两次,就可以确定占用资源比较大的进程了,然后输入q退出,回到终端内,把占用资源比较大的进程kill掉,这样可以解决相当一部分问题。

top -b -n 1 -d 1 > top.log

-d  秒数:指定top命令每隔几秒更新,默认3秒;

-b :批量处理模式输出;

-n 次数:指定top命令执行的次数

在top命令的交互模式下(即不加入以上参数)

h:帮助

P:以CPU使用率排序

M: 以内存的使用率排序

N:以PID排序

q:退出

[root@rhel7 ~]# top

top - 02:15:55 up  8:54,  2 users,  load average: 0.02, 0.02, 0.05

Tasks: 433 total,   1 running, 432 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :  3868768 total,  3492268 free,   176756 used,   199744 buff/cache

KiB Swap:  4063228 total,  4063228 free,        0 used.  3480144 avail Mem 


   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 

   137 root      20   0       0      0      0 S  20.0  0.0   1:09.00 rcu_sched 

   141 root      20   0       0      0      0 S  16.0  0.0   0:03.53 rcuos/3 

  4550 root      20   0  130284   1984   1200 R  12.0  0.1   0:00.12 top 

     1 root      20   0   57580   7556   2656 S   0.0  0.2   0:02.89 systemd 

     2 root      20   0       0      0      0 S   0.0  0.0   0:00.22 kthreadd 

     3 root      20   0       0      0      0 S   0.0  0.0   0:00.58 ksoftirqd/0 

     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H 

     7 root      rt   0       0      0      0 S   0.0  0.0   0:05.33 migration/0 

     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh 

     9 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/0 

    10 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/1 

    11 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/2 

    12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/3 

    13 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/4

参考资料:

https://www.cnblogs.com/reid21/p/9507366.html

https://www.cnblogs.com/qmfsun/p/5729442.html

你可能感兴趣的:(Liunx 系统死机现象分析)