喜欢我的总是给我各种改善的建议,一般喜欢我的都喜欢扣1,而不喜欢我的,扣眼珠吧。
多花时间去修炼自己的不完美,不要浪费时间去挑剔别人的缺点,帮别人修正了缺点,却落得满身埋怨。。。说好的看透不说透,而我,哼,总是不信。
僵尸进程
记得好像写过相关僵尸进程的东西,稍微再写一点,因为总是有人说僵尸进程的存在会导致机器的load值变高,不知道哪里看到的谬论。
服务器的load值变高,只有两种情况,一个是进程的数量太多,而且进程的状态只有三种,一种是正在运行的,一种是sleeping的,一种是等待io的sleeping的,cpu只调度两个队列,从而僵尸进程都排不上号,僵尸进程的状态为Z。
进程的调度如下所示:
从以上来看,僵尸进程的存在并不会导致服务器的load值变高,而且,僵尸进程的存在不会占用内存,不会占用cpu时间,仅仅占用一个进程的数据结构,也就是进程号是占用的,从而最坏的结果就是导致服务器上不能创建新的进程。
在使用命令查看的时候,只要使用ps -ef|grep defunct就可以了,在top中看的时候,可以看到占用的内存为0,而且cpu时间会保持不变,也就是。。永远没有机会在cpu上运行。
对于服务器来说,创建进程的数量是有上限的,从而会导致无法创建新的进程。
一般的服务器上总有那么几个进程是僵尸进程,不用慌,慌也没用。
在使用容器的时候,产生僵尸进程的概率大大增加,为啥呢?
在使用容器的时候,通过entrypoint运行一个容器,然后在容器里面看,是pid为1,然而并不是真正的init进程,emmm,7.x的是systemd进程,只有pid为1能回收资源,当然这句话不是很对,父进程也是具有一定的回收能力的,但是例如孤儿进程啥的,就会被pid为1的进程接手,回收。
僵尸进程没有想象中的那么可怕,一个服务器上几万个僵尸进程,也就那样,重启下容器就好了。。。重启试试。
重点在于找到僵尸进程产生的程序,然后修改程序,而不是仅仅重启,心情不好,睡一觉就好了?骗鬼呢。