Linux系統卡死後緊急處理

前言: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

內存

相關文章
相關標籤/搜索