所谓假死,就是能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高,总得不到调度。

为什么要费那么大的力气把机器搞死?因为所有人都会遇到机器假死的情况。知道假死是怎么产生的,就可以针对假死的原因进行预防。

参见:

http://en.wikipedia.org/wiki/Out_of_memory

http://lwn.net/Articles/317814/

下面给出一个查看所有进程oom_socore的脚本:

echo startfor dir in `ls /proc`doif [ -d /proc/$dir ]thenif [ -f /proc/$dir/oom_score ]thencat /proc/$dir/cmdlineprintf '\n'cat /proc/$dir/oom_scorefifi
done echo done

另外,通过cgroup之类的手段应该是可以控制oom killer的行为的。

[Linux] 假死分析相关推荐

  1. 启动一个java项目http状态 500 - 内部服务器错误_Java web服务器假死分析

    问题现象: 服务端端口开着,客户端可以telnet 服务器上的端口,但访问服务时没有任何返回. 服务器环境 :Java 8 + linux CentOS release 6.5. 用apache ab ...

  2. SrpingCloud服务假死分析 参数优化

    背景 生产环境SpringCloud集群下,业务服务频繁卡顿.假死.心跳超时,触发自动重启机制. 版本 Eureka Server SpringCloud Hoxton.SR10 SpringBoot ...

  3. java假死_分析java进程假死

    一.引言 1.编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 2.编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现 ...

  4. java 进程假死原因_分析java进程假死状况

    1 引言 1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近 ...

  5. 分析java进程假死

    一.引言 1.编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 2.编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现 ...

  6. Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死

    Java本质上还是离不开操作系统,一来Java源码是用C/C++实现的,二来java进程还是需要依附于操作系统和硬件资源,有时候一些问题是操作系统级别导致的,下面的整个事件是源自一则真实的线上案例. ...

  7. java启动子线程过多导致卡死_java线程基础巩固---多Product多Consumer之间的通讯导致出现程序假死的原因分析...

    在上一次中已经实现一个生产者与消费者的初步模型(http://www.cnblogs.com/webor2006/p/8413286.html),但是当时只是一个生产者对应一个消费者,先贴下代码: p ...

  8. linux进程假死的原因_一次Spring Boot假死诊断

    这两天遇到一个服务假死的问题,具体现象就是服务不再接收任何请求,客户端会抛出Broken Pipe. 01 检查系统状态 执行top,发现CPU和内存占用都不高,但是通过命令 netstat -n | ...

  9. 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析

    文章目录 概述 jstack或者可视化工具检测是否死锁(没有) 原因分析 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信 - 遗留问题 我们看到了 应用卡住了 .... 怀疑是 ...

最新文章

  1. 基于 Zookeeper 的分布式锁实现
  2. 兴林村脱贫谋定向往宜居村庄-农业大健康·万祥军:美丽蝶变
  3. winforms中限定上传文件类型
  4. js根据ip自动获取地址(省市区)
  5. C# 中使用log4net 日志记录
  6. android 右边抽屉,android – 抽屉在右侧抽屉中切换
  7. W3C发布DRM作为推荐方案
  8. windows xp sp3 原版收藏。
  9. 在线XML转CSV工具
  10. Android开发屏幕适配
  11. 设计师必备的8大图库
  12. 水星MW300R-通用无线路由器安全设置-防蹭网-详解-教程
  13. 3种在JavaScript中验证电子邮件地址的方法
  14. Linux下Oracle 11g安装(3)—— Oracle安装篇
  15. 题解 CF38C 【Blinds】
  16. 微信读书从本地导入书籍失败
  17. 科技云报道:数字化技术,正在改写企业出海的游戏规则
  18. 借道大数据 互联网基金再探“蓝海”
  19. MAC 系统安装 Maven 及环境变量配置
  20. 一种面向电信行业基站数据的数据采集系统的设计与实现

热门文章

  1. 【存储数据恢复】HP EVA存储误删除VDISK的数据恢复案例
  2. Android 使用ViewPager2+ExoPlayer+VideoCache 实现仿抖音视频翻页播放
  3. Unity/c#鼠标右键控制相机围绕物体旋转/滚轮控制远近
  4. 基于ADS的低噪声放大电路设计
  5. 【汇正财经】什么是多翻空?
  6. HTML的操作手册,Html的操作手册及编程
  7. Linux进阶篇--磁盘阵列(RAID)和逻辑卷管理
  8. MJD44H11T4G硅功率晶体管 8安培 80伏特 20 WATTS
  9. 命令行启用计算机,[如何使用计算机重新启动cmd命令] cmd命令重新启动计算机
  10. 计算机5800计算道路标高程序,Casio fx-5800P计算器三个公路基本测量程序编写与应用...