生产案例、Linux出现假死,怎么回事?

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,进入调试。而后分析故障。
调试

相关文章
相关标签/搜索