linux 性能自我学习 ———— 不可中断进程和僵尸进程 [四]
前言
简单介绍一下不可中断进程和僵尸进程。
正文
先来看下进程的状态:

那么这一列的状态是什么呢?
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 性能自我学习 ———— 不可中断进程和僵尸进程 [四]的更多相关文章
- 二十三、Linux 进程与信号---进程链和进程扇、守护进程和孤儿进程以及僵尸进程
23.1 进程链和进程扇 23.1.1 概念 进程链:一个父进程构建出一个子进程,子进程再构建出子子进程,子子进程构建出子子子进程.... 这种就为进程链 进程扇:一个父进程构建出多个子进程,子进程都 ...
- 1.1 Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析
操作系统经典的三态如下: 1.就绪态 2.等待(阻塞) 3.运行态 其转换状态如下图所示: 操作系统内核中会维护多个队列,将不同状态的进程加入到不同的队列中,其中撤销是进程运行结束后,由内核收回. 以 ...
- [Linux] 孤儿进程与僵尸进程[总结]
转载: http://www.cnblogs.com/Anker/p/3271773.html 1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两 ...
- [linux]孤儿进程与僵尸进程
转载自:http://www.cnblogs.com/Anker/p/3271773.html 一.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两 ...
- linux下的进程(孤儿进程、僵尸进程)
linux提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到.这种机制就是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开文件,占用的内存等.但是仍然为其保留一定的信息 ...
- Python Web学习笔记之并发编程的孤儿进程与僵尸进程
1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上 ...
- linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程
本节目标: 复制进程映像 fork系统调用 孤儿进程.僵尸进程 写时复制 一,进程复制(或产生) 使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文.进程堆栈. ...
- python学习笔记—— 多进程中的 孤儿进程和僵尸进程
1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调 ...
- 【Linux 进程】孤儿进程、僵尸进程和守护进程
1.孤儿进程: 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作.孤儿进程是 ...
- Linux系统编程——特殊进程之僵尸进程
僵尸进程(Zombie Process) 进程已执行结束,但进程的占用的资源未被回收.这种进程称为僵尸进程. 在每一个进程退出的时候,内核释放该进程全部的资源.包含打开的文件.占用的内存等. 可是仍然 ...
随机推荐
- springMvc精简整理
精简共分步 新建一个web工程 导入核心就二包,因为springmvc 包自己有依赖 <?xml version="1.0" encoding="UTF-8&qu ...
- P8+架构师养成计划
一.P8+要求 1.收集能力要求 1.专业能力 技术架构.业务架构.做到无中生有. 2.基石能力 沟通协调能力.团队管理能力.逻辑能力.风险控制能力. 3.影响力 团队内部影响.外部影响.行业影响力. ...
- [学习笔记].Net5项目打包到Linux系统服务时遇到的坑
如果按照官方文档的步骤手动安装.Net5 会有一个坑: 在 Linux 上手动安装 .NET - .NET | Microsoft Docs 在使用systemd打包.Net5服务的时候,无法运行, ...
- ThreadLocal父子间通信的四种解决方案
ThreadLocal父子间通信的四种解决方案 ThreadLocal 是存储在线程栈帧中的一块数据存储区域,其可以做到线程与线程之间的读写隔离. 但是在我们的日常场景中,经常会出现父线程需要向子线程 ...
- python的GUI工具dearpygui入门指南
一 概念 1.dearpygui 它是一个易于使用的.动态的.GPU加速的.跨平台的.适用于Python的图形用户界面工具包(GUI). 2.特性 GPU 渲染 简单的内置异步功能支持 完整的主题和样 ...
- javascript import maps 特性现已被全部主流浏览器支持
值得庆祝 Import maps 特性现在可以在全部三个主要浏览器内使用 现在主流现代web 应用 引入和利用javascript 是通过 Es module 模块实现. 在开发javascript上 ...
- SpringBoot 支付宝付款接口类、支付异步回调函数模板
1.付款接口类 1.1.引入Maven依赖 <dependency> <groupId>com.alipay.sdk</groupId> <artifactI ...
- View事件机制分析
目录介绍 01.Android中事件分发顺序 1.1 事件分发的对象是谁 1.2 事件分发的本质 1.3 事件在哪些对象间进行传递 1.4 事件分发过程涉及方法 1.5 Android中事件分发顺序 ...
- OpenLayers绘制热力图 代码记录
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 做地图开发,往往需要掌握专题地图制作的技能.今天用OpenLayers6来做一个热力图的效果. 页面效果: 代码部分: <!DOCT ...
- 记录--关于无感刷新Token,我是这样子做的
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 什么是JWT JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可 ...