前言:Linux系统卡死了的状况有不少,最多见的是系统负载太高致使的。还能够运行内存耗用极大的程序(如虚拟机),也会迅速提高系统负载。注意:不能再试图依赖任何图形界面的东西,如 Gnome的系统监视器,只会继续加剧这种卡死的局面。
有时系统负载过大,程序不能及时响应,很容易死机。我的用户强行关机再重启就OK。可是对于须要全天工做提供服务的服务器来讲,强行关机不只会致使服务器中止工做,同时形成未同步的数据丢失。
总结下尝试的解决方法
1. 进入TTY终端
a. Ctrl+Alt+Fn(F1-F6)进入TTY1终端字符界面, 输入用户名和密码以登陆node
b. free命令可查看内存使用状况缓存
[root@rhel7 ~]# free -m total used free shared buff/cache available Mem: 3778 171 3411 8 194 3399 Swap: 3967 0 3967
c. 开始清理内存(须要root权限)安全
sync echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches
sync的做用是将全部正在内存中的缓冲区写到磁盘中,其中包括已经修改的文件inode、已延迟的块I/O以及读写映射文件,从而确保文件系统的完整性。
注释:1:释放页缓存 2:释放dentries和inodes 3:释放全部缓存服务器
d.top查看CPU使用状况
进入后用top命令查看进程表,等待进程信息表刷新一两次,就能够肯定占用资源比较大的进程了,而后输入q退出,回到终端内,把占用资源比较大的进程kill掉,这样能够解决至关一部分问题。spa
[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
2. 使用reisub
a. REISUB简介
Sys Rq 是一种叫作系统请求,按住 Alt-Print 的时候就至关于按住了 Sys Rq 键,这个时候输入的一切都会直接由 Linux内核来处理,它能够进行许多低级操做。这个方法能够在各类状况下安全地重启计算机。
SysRq是Linux提供的一个“Magic System Request Key”,它能够在系统出现故障的时候协助恢复和调试系统。只要你的虚拟终端或串口还能够接收键盘输入(系统还能响应键盘的按键中断),SysRq就可用,你能够借助它来查看当时的内存、进程状态等信息,而不是直接强行拔掉电源重启系统。
reisub 中的每个字母都是一个独立操做,他们分别表示:调试
R - 把键盘设置为 ASCII 模式 SysRq: Keyboard mode set to XLATE 有关键盘工做模式,请参考资料中的 kbd_mode 手册。 E - 向除 init 之外全部进程发送 SIGTERM 信号 SysRq: Terminate All Tasks 由于 syslogd 自己也被结束,因此 SysRq 也许不会被记录下来。可是查看 /var/log/messages 会看到相似下面的消息: exiting on signal 15(SIGTERM) I - 向除 init 之外全部进程发送 SIGKILL 信号 SysRq: Kill All Tasks 与 E 相似,由于 syslogd 自己也被结束,除非 netconsole 或串口记录已打开,不然连上面的信息都没法捕捉。同时,由于 SIGKILL 是不可捕获的信号,/var/log/messages 里面也不会留下任何线索。 S - 磁盘缓冲区同步 SysRq : Emergency Sync Emergency Sync complete 该操做会把磁盘缓冲区的数据回写,以防止数据丢失,一般会有必定延时。在能看到输出的状况下,请等到 ” Emergency Sync complete ” 事后再继续后续操做。不然,等十秒钟左右,再进行后续 SysRq 操做。 U - 从新挂载为只读模式 SysRq : Emergency Remount R/O Emergency Remount complete 该操做会把磁盘重挂载为只读模式,以防止数据的损坏。与 S 相似,该操做一般也有必定延时。请等到 ” Emergency Remount complete ” 出现事后再进行后续操做,或者等候十秒钟再进行后续 SysRq 操做。 B - 当即重启系统 SysRq: Resetting 该操做会当即重启系统
b.要使用Magic Sysrq Key,有三个基本条件
- 键盘上有Sysrq键
- 系统使用的内核,在编译时打开了CONFIG_MAGIC_KEY选项 blog
[root@rhel7 ~]# grep -F CONFIG_MAGIC_SYSRQ /boot/config-`uname -r` CONFIG_MAGIC_SYSRQ=y #表示已开启
-系统配置Magic Sysrq Key为可用,临时启用,设置/proc/sys/kernel/sysrq进程
[root@rhel7 ~]# sudo echo "1" > /proc/sys/kernel/sysrq 查看 /etc/sysctl.conf,确认 kernel.sysrq = 1 若是先前为0,更改配置后使用如下方式激活:sysctl -p
c.实际操做技巧
同时按下<Alt>+<SysRq>行不通!只会蹦出来一个屏幕截图窗口。因此,真正的作法应该是:
注:键盘上能够找到一个叫作“Sys Rq”的键,在台机的键盘上一般与 Prt Sc 共键,在笔记本可能在其余位置,如 Delete。
(1)伸出你的左手,同时按住<Alt>键,别松开
(2)右手先按一下<SysRq>,左手别松开
(3)-E-I-S-U-B 这个序列的推荐使用方式是:R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B
内存