前言

简单介绍一下不可中断进程和僵尸进程。

正文

先来看下进程的状态:

那么这一列的状态是什么呢?

R 是Running 或 Runnable 的缩写, 表示进程在cpu 的就绪队列中,正在运行或者正在等待运行。

D 是disk sleep 的缩写,也就是不可中断睡眠,一般表示进程正在跟硬件交互,并且交互过程不允许其他进程或者中断打断。

Z 是Zombie 的缩写,表示僵尸进程,表示进程已经介绍了,但是父进程还没有回收它的资源

S 是interruptible sleep 缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时, 他会被唤醒并进入R状态

I 是 idle的缩写, 也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致不可中断进程用D 表示,但是某些内核线程来说,他们可能实际并没有任何负载,用idle 就是为了区分。

D 状态的进程会导致平均负载升高,i 状态的进程不会。

还有两种状态,一种是T 状态,另外一种是X状态。

X 是状态为死亡,一般看不到。

另外一种是T 状态,表示是stopped 或者 traced 状态。

比如我们进程调试就是T状态,发送一个信号sigstop,然后就会停止。再发送sigcont 信号,这个时候就会继续运行。

该篇的主题是不可中断进程和僵尸进程。

前面结束了,不可中断进程,一般是在进行系统调用。

僵尸进程是怎么样的呢? 僵尸进程在多进程中可能遇到。

正常情况下,当用给进程创建了子进程后,它应该通过系统调用wait() 或者 waitpid() 等待子进程结束,回收子进程资源。

而子进程结束时候,会向父进程发送sigchld信号,所以父进程还可以注册sigchld 信号的畜栏里函数,异步回收资源。

如果父进程没有那么做,或者子进程执行太快。父进程还没来得及处理子进程状态,那么子进程就已经提前推出,那么这个时候子进程就会变成僵尸进程。

通常,僵尸进程持续时间很短,如果父进程一直没有处理子进程的终止,那么就会一直保持运行状态,这个时候就会占用pid 进程号,导致新的进程不能创建。

实验

docker run --privileged --name=app -itd feisky/app:iowait

top 一下:

僵尸进程特别多。

然后我们还发现了,Ss+ 和D+

这个+ 是什么意思呢?

有两个概念。

进程组表示一组相互关联的进程,比如每个子进程都是父进程所在组的成员

会话指共享一个控制终端的一个或者多个进程组。

那么这个时候,我们如何来分析呢?

yum install dstat

当iowait 升高时候,read 会很大,说明iowait 升高跟磁盘的读请求相关,可能是磁盘读导致的。

那么可以使用top 命令,观察d状态的进程。

然后通过pidstat

pidstat -d -p 4344 1 3

发现其并不高。

那么直接用pidstat 查看全部的:

pdistat -d 1 20

发现的确是app导致的。

然后就可以用strace 追踪代码了。

strace -p 6082

这种情况如果是root 用户查看不了的话,那么可能这个进程不存在或者已经Z状态了。

那么这个时候可以使用perf来搞定。

这个时候你就的确发现其在系统读取了。

那么僵尸进程怎么解决呢?

前面已经发现了僵尸进程了。

那么可以找到其父进程:

pstree -aps 3084

可以看到程序还是app进程了。

然后就可以去检查代码部分了。

下一节linux 软中断。

linux 性能自我学习 ———— 不可中断进程和僵尸进程 [四]的更多相关文章

  1. 二十三、Linux 进程与信号---进程链和进程扇、守护进程和孤儿进程以及僵尸进程

    23.1 进程链和进程扇 23.1.1 概念 进程链:一个父进程构建出一个子进程,子进程再构建出子子进程,子子进程构建出子子子进程.... 这种就为进程链 进程扇:一个父进程构建出多个子进程,子进程都 ...

  2. 1.1 Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析

    操作系统经典的三态如下: 1.就绪态 2.等待(阻塞) 3.运行态 其转换状态如下图所示: 操作系统内核中会维护多个队列,将不同状态的进程加入到不同的队列中,其中撤销是进程运行结束后,由内核收回. 以 ...

  3. [Linux] 孤儿进程与僵尸进程[总结]

    转载: http://www.cnblogs.com/Anker/p/3271773.html 1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两 ...

  4. [linux]孤儿进程与僵尸进程

    转载自:http://www.cnblogs.com/Anker/p/3271773.html 一.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两 ...

  5. linux下的进程(孤儿进程、僵尸进程)

    linux提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到.这种机制就是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开文件,占用的内存等.但是仍然为其保留一定的信息 ...

  6. Python Web学习笔记之并发编程的孤儿进程与僵尸进程

    1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上 ...

  7. linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程

    本节目标: 复制进程映像 fork系统调用 孤儿进程.僵尸进程 写时复制 一,进程复制(或产生)      使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文.进程堆栈. ...

  8. python学习笔记—— 多进程中的 孤儿进程和僵尸进程

    1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调 ...

  9. 【Linux 进程】孤儿进程、僵尸进程和守护进程

    1.孤儿进程: 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作.孤儿进程是 ...

  10. Linux系统编程——特殊进程之僵尸进程

    僵尸进程(Zombie Process) 进程已执行结束,但进程的占用的资源未被回收.这种进程称为僵尸进程. 在每一个进程退出的时候,内核释放该进程全部的资源.包含打开的文件.占用的内存等. 可是仍然 ...

随机推荐

  1. 影刀rpa第一个学习项目开发所得

    1.我要在某个位置新增一条指令,但是可能没有选择好的原因,这条指令被添加到指令的最后面了,我的指令行数有几十行,然后我就要把这条指令拖动到上一屏我指定的位置上,但当我拖动指令到了当前屏最上方时,发现编 ...

  2. Zabbix“专家坐诊”第183期问答汇总

    问题一 Q:老师,请问一下zabbix采集的数据怎么过滤,获取数据是nottime=20:30 notafter=3,怎么过滤出netafter=3 ?谢谢. A:过滤器设置如下图. 问题二 Q:大佬 ...

  3. Linux 服务器Python后台运行服务(ssh断开不退出)

    壹: 最近用python搭建一个物联网数据存储的微服务,部署到ubuntu上去,所以,python后台运行是一个必不可少的环节. 贰: 这个只需要是一个命令即可: 命令1(记录所有日志): nohup ...

  4. Java/Kotlin Double保留小数点后几位

    下面以保留2位小数,且按照四舍五入规则的例子 方法 1.BigDecimal.setScale() 此方法得到的还是个double数值 double one = 5.864; BigDecimal t ...

  5. Windows 2012 R2 修复CredSSP 远程执行代码漏洞 CVE-2018-0886

    本文基于window 2012 R2版本,各位参考下载自己版本对应的补丁包即可 说明 公司的安全性检查,需要修复服务器上的漏洞,其中有个漏洞是CVE-2018-0886,结果网上的资料和一番折腾,终于 ...

  6. 一个简单的HTTP服务器的实现

    我们继续我们的HTTP服务器的实现(使用别的代码来实现), 这个HTTP服务器的实现,我们主要就是关注TCP服务器中的recv还有send的处理. 首先,看一下HTTP,我们在用浏览器访问我们的TCP ...

  7. 走进volatile的世界,探索它与可见性,有序性,原子性之间的爱恨情仇!

    写在开头 在之前的几篇博文中,我们都提到了 volatile 关键字,这个单词中文释义为:不稳定的,易挥发的,在Java中代表变量修饰符,用来修饰会被不同线程访问和修改的变量,对于方法,代码块,方法参 ...

  8. 记录--不做码农而做 DJ 😎

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Coding 一定很累吧,快来跟我一起 Djing !!! 我的思路是通过监听键盘按下事件,在用户按下对应键时,找到相应的按键元素和音频元 ...

  9. 从零开始学Spring Boot系列-集成Kafka

    Kafka简介 Apache Kafka是一个开源的分布式流处理平台,由LinkedIn公司开发和维护,后来捐赠给了Apache软件基金会.Kafka主要用于构建实时数据管道和流应用.它类似于一个分布 ...

  10. 测试监控系列:使用vb批量统计nmon结果

    适用于一次统计几十台机器的nmon监控结果. 新建excel,在设置里打开开发者工具,点查看代码,把下面代码贴到模块里即可.最后把表格保存为.xlsm Sub for_nmon()'用来统计nmon结 ...