系统运维进程管理知识-系统假死情况说明
操作系统出现假死情况说明
在操作系统使用的过程中,有时会出现所谓的假死的情况,下面就详细给大家介绍一下什么是系统的假死的情况。
1. 系统假死情况概念介绍
所谓系统假死情况,就是能通过网络ping通主机,但是ssh远程连接不上,任何其他操作也都没反应,包括主机服务器上如果部署了nginx的web服务,也无法打开页面。
作为一个多任务操作系统,要让系统CPU资源出现过于繁忙的状态,并且使ssh都连接不上去,也不是那么容易的,尤其是现在还有fd保护、进程数保护、最大内存保护之类的机制。
在fork很多进程时,系统会变得很慢,但ssh还是能连上去;可以分配很多内存,但是内存占用多到一定程度oom killer就会把你的进程杀掉,于是ssh又能工作了。
2. 系统假死情况出现原因
有一个确定可以把系统搞成假死的办法是:主进程分配固定内存,然后不停的fork,并且在子进程里面sleep 100。
也就是说,当主进程不停fork的时候,很快会把系统的物理内存用完,当物理内存不足时候,系统会开始使用swap;那么当swap不足时会触发oom killer进程;
当oom killer杀掉子进程时,主进程会立刻fork新的子进程,并在此导致内存用完,再次触发oom killer进程,于是进入死循环。而且oom killer是系统底层优先级很高的内核线程,也参与死循环过程。
系统假死后,为何能通过网络ping通主机,却无法连接呢
此时机器可以ping通,但是无法ssh连接上,这是由于ping是在系统底层处理的,没有参与进程调度;sshd要参与进程调度,但是优先级没oom killer高,总得不到调度。
3. 系统假死情况处理思路
知道假死情况产生的原因之后,就可以针对假死的原因进行预防。(其实假死的情况很少发生,只有当代码写的bug很多的情况下会出现)
其实建议使用nice将sshd的进程优先级调高。这样当系统内存吃紧时,还能勉强登录系统,进行调式,随之分析故障情况。

浙公网安备 33010602011771号