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) 进程已执行结束,但进程的占用的资源未被回收.这种进程称为僵尸进程. 在每一个进程退出的时候,内核释放该进程全部的资源.包含打开的文件.占用的内存等. 可是仍然 ...
随机推荐
- 探索Terraform实践:优化基础设施管理
Terraform 是管理基础设施及代码(IaC)最常用的工具之一,它能使我们安全且可预测地对基础设施应用更改. Terraform作为一个强大的基础设施即代码工具,为开发人员和运维团队提供了一种简单 ...
- 数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义?
数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义? 了解SOC 2与ISO 27001的区别,你就知道SOC 2对智能自动化厂商的意义了 文/王吉伟 要问当前组织对于数字化转型的最大顾虑 ...
- GaussDB(DWS)运维利刃:TopSQL工具解析
本文分享自华为云社区<GaussDB(DWS)运维利刃:TopSQL工具解析>,作者:胡辣汤. 在生产环境中,难免会面临查询语句出现异常中断.阻塞时间长等突发问题,如果没能及时记录信息,事 ...
- spring 注入参数时为list map写法用例
导包基础:这了让服务器支持json 需要导入下面包 <dependency> <groupId>com.alibaba</groupId> <artifact ...
- OBS Studio多开/多平台直播的最佳解决方案
OBS是一款强大的PC端免费的直播推流及录制工具,功能很强大,它支持开发者根据需求开发插件集成使用 我们知道OBS支持通过插件来实现多路推流,它的优点是只需开启一个OBS窗口就可以同时推流到多个不同的 ...
- EL1008E: Property or field 'timestamp' cannot be found on object of type 'java.util.HashMap' - maybe not public-请求springboot-后台报错
一.问题由来 自己在使用node.js写的前端项目访问springBoot访问的后端项目的时候,springboot项目中报这个错,抛出这个异常. 详细的错误信息如下: Servlet.service ...
- stm32 中断处理函数注意事项
一 前记 最近在公司的一个项目中碰到一个解决了定位很久的 bug , bug 找到的时候发现犯了很低级的错误--在中断处理函数中调用了 printf 函数,因为中断处理函数的调用了不可重入函数,导致接 ...
- 修改Tomcat服务器Server Locations
首先双击我们集成好的Tomcat服务器 修改Server Locations选项 Specify the server path (i.e. catalina.base) and deploy p ...
- 11_使用SDL播放WAV
使用命令播放WAV 对于WAV文件来说,可以直接使用ffplay命令播放,而且不用像PCM那样增加额外的参数.因为WAV的文件头中已经包含了相关的音频参数信息. ffplay in.wav 接下来演示 ...
- Spring Boot自动运行之 CommandLineRunner、ApplicationRunner和@PostConstruct
在使用Spring Boot开发的工作中,我们经常会需要遇到一种功能需求,比如在服务启动时候,去加载一些配置,去请求一下其他服务的接口.Spring Boot给我们提供了三种常用的实现方法: 第一种是 ...