暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

运愁维卧 2021-08-04
1569

点击上方【运愁维卧】关注,回复消息“0101”,获取职场N多简历模板、面试经验以及IT资料包~

1.什么是假死
所谓假死,就是能ping通,但是ssh不上去;任何其他操作也都没反应,包括上面部署的nginx也打不开页面。


2.假死其实很难出现一次
作为一个多任务操作系统,要把系统忙死,忙到ssh都连不上去,也不是那么容易的。尤其是现在还有fd保护、进程数保护、最大内存保护之类的机制。
你可以fork很多进程,系统会变得很慢,但是ssh还是能连上去;你可以分配很多内存,但是内存多到一定程度oom killer就会把你的进程杀掉,于是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,进入调试。然后分析故障。

renice -2 进程pid 或者使用ps -ef |grep 进程名 找到该进程的pid,再执行top命令,输入r后提示输入pid,回车,输入要求输入优先级权值(-20到19)值越小表示优先级越高,输入-19,回车。设置完成。

可以使用ps -aeo cmd,pid,nice | grep 服务名称,如sshd进行查看。

来源:https://www.cnblogs.com/oldxu/p/10789664.html

你可能对以下感兴趣~

赠福利 | Grafana展示Zabbix监控数据源

AD活动目录的安装和检查排障

CentOS系统优化(附一键脚本)

小 姐 姐 边跳舞边详解服务器密码忘记了怎么办?

Nginx+Tomcat实现负载均衡及动静分离

延时从库的配置及删库恢复案例

MySQL主从复制搭建

收藏 | 《实战网络设计手写笔记》

收藏 | 《Linux基础入门手写笔记》

JumpServer堡垒机,预防飞来之“锅”

免费 | 趣学Linux基础入

文章转载自运愁维卧,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论