linux 假死分析

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

作为一个多任务操作系统,要把系统忙死,忙到ssh都连不上去,也不是那么容易的。尤其是现在还有fd保护、进程数保护、最大内存保护之类的机制。你可以fork很多进程,系统会变得很慢,但是ssh还是能连上去;你可以分配很多内存,但是内存多到一定程度oom killer就会把你的进程杀掉,于是ssh又能工作了。

有一个确定可以把系统搞成假死的办法是:主进程分配500MB内存,然后不停的fork,并且在子进程里面sleep(100)。

这是什么原理?这是swap、copy on write、allocate on write、oom killer一起作用的结果。当主进程不停fork的时候,很快会把系统的物理内存用完,然后开始swap;在swap的时候触发了fork的copy on write属性;此时会需要分配真正的内存给之前copy on write的子进程,由于内存不足,这将触发oom killer开始杀进程;当oom killer杀掉了子进程,主进程立刻又fork了新的子进程,并再次导致内存用完,再次触发oom killer;于是死循环,而且oom killer是系统底层优先级很高的内核线程,也在参与死循环。

此时机器可以ping通,但是无法ssh上去。这是由于ping是在系统底层处理的,没有参与进程调度;sshd要参与进程调度,但是优先级没oom killer高,总得不到调度。

为什么要费那么大的力气把机器搞死?因为所有人都会遇到机器假死的情况。知道假死是怎么产生的,就可以针对假死的原因进行预防。
其实建议使用nice将sshd的进程优先级调高。这样当系统内存吃紧,还能勉强登陆sshd,进入调试。然后分析故障。

原文地址:https://www.cnblogs.com/baozexu/p/11415459.html

时间: 2025-01-16 21:55:30

linux 假死分析的相关文章

Thread--生产者消费者假死分析

1 package p_c_allWait; 2 3 public class ValueObject { 4 5 public static String value = ""; 6 7 } 1 package p_c_allWait; 2 3 public class P { 4 5 private String lock; 6 7 public P(String lock) { 8 super(); 9 this.lock = lock; 10 } 11 12 public vo

Linux # Kubuntu 假死,结束进程方法

分析思路: 要知道运行了哪些进程,结束的目标进程是哪些,如何得到运行中的进程,需要哪些操作. 借助搜索引擎,搜索关键字:kconsole 列出进程,查询相关信息,文后参考链接 执行过程: ps aux 列出运行进程 (记录结束的目标进程的 pid,比如 firefox pid 为 22481) 或者 grep firefox ,将显示 22481,即为 pid 接着 kill 22481 ,即可. 备注: 这些命令详细介绍可以看下面链接 参考: Win/Mac/Linux(gnome|kde)

分析java进程假死状况

摘自: http://www.myexception.cn/internet/2044496.html 分析java进程假死情况 1 引言 1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响应,查看服务器端tomcat的进程是存活的,查看业务日志的时候发

linux命令行模式下输入Ctrl+s后界面锁定,假死。

使用vim时,如果按了组合键ctrl+s,会发现按什么都没反应,处于假死的状态,其实这个是linux系统命令行模式下的锁屏快捷键,只是输入的命令没有在输出终端(显示器)显示出来而已.所以,不止vim,只要在命令行模式下,都会如此.要退出此种锁屏界面,需按ctrl+q,此时会发现先前在锁屏时输入的字符都显示出来了,并且可正常使用了.所以,当不注意或者不小心按下ctrl+s时,还真不能乱敲键盘,以免不小心输入破坏性命令,否则麻烦大了! 原文地址:http://blog.51cto.com/miste

Eclipse for Linux程序使用时假死

如果已经假死,并且无法关闭,打开终端输入指令 eclipseSID处填写eclipseSID号 $top $sudo kill eclipseSID 这时就可以强制关闭假死的eclipse了 假死解决方案 1. 打开终端(terminal)然后输入以下指令: export SWT_GTK3=0 2.然后进入eclipse的目录下 ,用gedit打开eclipse,ini文件,对其进行如下修改: cd /home/lt/eclipse/jee-mars/eclipse/ sudo gedit ec

XenServer 虚拟机假死亮黄解决思路之我见 2

去年曾经写过一篇文章,关于XenServer虚拟机假死的问题,http://kaiqian.blog.51cto.com/236001/1625411 有兴趣的同学可以参看此文章. 前段时间又有人向我反映这个问题,所以延续当时的思路做了进一步排错. 现象:一台XenServer上的在正常运行过程中,数台虚拟机进入亮黄.假死的状态,由于是生产环境,管理员直接将服务器重启,虚拟机工作正常.但这个问题据说之前还发生过一次,说明不是单点问题,所以需要找到问题的原因,防止此问题再次发生. 初步检查:服务器

TCP连接的TIME_WAIT过多导致 Tomcat 假死

最近发现使用的Tomcat 7会经常假死.前端点击页面无任何反应,打开firebug,很多链接一直在等待服务器的反应.查看服务器的状态,CPU占用很少,最多不超过10%,一般只有2%,3%左右,内存占用倒是接近80, 90%.一开始怀疑是tomcat内存配置不够,但是打开 jvisualvm.exe 分析,发现Tomcat 占用的堆内存没有什么问题.因为是假死,所以最后怀疑到 tomcat的 链接数和 数据库的链接数的配置估计太小了.netstat -na 结果页显示很多time_wait. 查

tomcat 假死

1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照.1.2编写背景最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响应,查看服务器端tomcat的进程是存活的,查看业务日志的时候发现日志停止没有任何最新的访问日志.连tomcat下面的catalina.log也没有任何访问记录,基本断定该台tomcat已不能提供服务.2 分

tomcat 假死现象(转)

1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响应,查看服务器端tomcat的进程是存活的,查看业务日志的时候发现日志停止没有任何最新的访问日志.连tomcat下面的catalina.log也没有任何访问记录,基本断定该台tomcat已不能提供服务.