1.什麼是假死
所謂假死,就是能ping通,可是ssh不上去;任何其餘操做也都沒反應,包括上面部署的nginx也打不開頁面。nginx
2.假死其實很難出現一次
做爲一個多任務操做系統,要把系統忙死,忙到ssh都連不上去,也不是那麼容易的。尤爲是如今還有fd保護、進程數保護、最大內存保護之類的機制。
你能夠fork不少進程,系統會變得很慢,可是ssh仍是能連上去;你能夠分配不少內存,可是內存多到必定程度oom killer就會把你的進程殺掉,因而ssh又能工做了。ssh
3.假死是如何實現的
有一個肯定能夠把系統搞成假死的辦法是:主進程分配固定內存,而後不停的fork,而且在子進程裏面sleep(100)。
也就是說,當主進程不停fork的時候,很快會把系統的物理內存用完,當物理內存不足時候,系統會開始使用swap;那麼當swap不足時會觸發oom killer進程;
當oom killer殺掉了子進程,主進程會馬上fork新的子進程,並再次致使內存用完,再次觸發oom killer進程,因而進入死循環。並且oom killer是系統底層優先級很高的內核線程,也在參與死循環。操作系統
4.系統假死爲什麼能ping同沒法鏈接
此時機器能夠ping通,可是沒法ssh上去。這是因爲ping是在系統底層處理的,沒有參與進程調度;sshd要參與進程調度,可是優先級沒oom killer高,總得不到調度。線程
5.出現假死怎麼辦?
爲何要費那麼大的力氣把機器搞死?咱們知道假死是怎麼產生的便可,這樣能夠針對假死的緣由進行預防。 (其實假死的狀況不多發生,只有當代碼寫的bug不少的狀況下會出現。)
其實建議使用nice將sshd的進程優先級調高。這樣當系統內存吃緊,還能勉強登錄sshd,進入調試。而後分析故障。調試