07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
进程状态
$ topPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28961 root 20 0 43816 3148 4040 R 3.2 0.0 0:00.01 top620 root 20 0 37280 33676 908 D 0.3 0.4 0:00.01 app1 root 20 0 160072 9416 6752 S 0.0 0.1 0:37.64 systemd1896 root 20 0 0 0 0 Z 0.0 0.0 0:00.00 devapp2 root 20 0 0 0 0 S 0.0 0.0 0:00.10 kthreadd4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq7 root 20 0 0 0 0 S 0.0 0.0 0:06.37 ksoftirqd/0
- R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。
- D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
- Z 是 Zombie 的缩写,如果你玩过“植物大战僵尸”这款游戏,应该知道它的意思。它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
- S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。
- I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高, I 状态的进程却不会。
案例分析
你的准备
操作和分析
$ docker run --privileged --name=app -itd feisky/app:iowait
$ ps aux | grep /app
root 4009 0.0 0.0 4376 1008 pts/0 Ss+ 05:51 0:00 /app
root 4287 0.6 0.4 37280 33660 pts/0 D+ 05:54 0:00 /app
root 4288 0.6 0.4 37280 33668 pts/0 D+ 05:54 0:00 /app
# 按下数字 1 切换到所有 CPU 的使用情况,观察一会儿按 Ctrl+C 结束
$ top
top - 05:56:23 up 17 days, 16:45, 2 users, load average: 2.00, 1.68, 1.39
Tasks: 247 total, 1 running, 79 sleeping, 0 stopped, 115 zombie
%Cpu0 : 0.0 us, 0.7 sy, 0.0 ni, 38.9 id, 60.5 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.7 sy, 0.0 ni, 4.7 id, 94.6 wa, 0.0 hi, 0.0 si, 0.0 st
...PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND4340 root 20 0 44676 4048 3432 R 0.3 0.0 0:00.05 top4345 root 20 0 37280 33624 860 D 0.3 0.0 0:00.01 app4344 root 20 0 37280 33624 860 D 0.3 0.4 0:00.01 app1 root 20 0 160072 9416 6752 S 0.0 0.1 0:38.59 systemd
...
- 第一点,iowait 太高了,导致系统的平均负载升高,甚至达到了系统 CPU 的个数。
- 第二点,僵尸进程在不断增多,说明有程序没能正确清理子进程的资源。
小结
- 不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
- 僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态我们通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。
思考
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)相关推荐
- 08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)
上一节,我给你讲了 Linux 进程状态的含义,以及不可中断进程和僵尸进程产生的原因,我们先来简单复习下. 使用 ps 或者 top 可以查看进程的状态,这些状态包括运行.空闲.不可中断睡眠.可中断睡 ...
- Linux性能排查——系统中出现大量不可中断进程和僵尸进程排查
1.进程状态 top 和 ps 是最常用的查看进程状态的工具,我们就从 top 的输出开始.下面是一个 top 命令输出的示例,S 列(也就是 Status 列)表示进程的状态.从这个示例里,你可以看 ...
- linux 杀掉php,Linux_在Linux系统中使用xkill命令杀掉未响应的进程,我们如何在Linux中杀掉一个资 - phpStudy...
在Linux系统中使用xkill命令杀掉未响应的进程 我们如何在Linux中杀掉一个资源/进程?很明显我们会找出资源的pid然后用kill命令. 说的更明白一点,我们可以找到某个资源(比如termin ...
- Linux系统编程 74 孤儿进程和僵尸进程
Linux系统编程 74 孤儿进程和僵尸进程 学习笔记 孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为 init进程,称为init进程领养了孤儿进程. init进程会去接替 ...
- 【Linux系统编程】特殊进程之僵尸进程
00. 目录 文章目录 00. 目录 01. 僵尸进程概述 02. 僵尸进程案例 03. 避免僵尸进程 04. 附录 01. 僵尸进程概述 进程已运行结束,但进程的占用的资源未被回收,这样的进程称为僵 ...
- Linux系统编程(二)孤儿进程和僵尸进程
Linux系统编程(二) 一.exec函数族 1.exec函数 二.孤儿进程和僵尸进程 三.wait和waitpid 1.wait函数 2.waitpid函数 一.exec函数族 exec函数使用时, ...
- vmware-vmx.exe无法结束进程_孤儿进程与僵尸进程产生原理分析,以及终极解决方案案例实现...
开发中,在io密集型的场景下,我们可以使用多进程(多线程/协成更nber)来提高任务的处理速度.这就需要主进程需要等待所有工作进程执行完毕后才可以去汇总结果后退出. 但如果不规范的编写程序,就可能导致 ...
- Linux中的进程控制:进程退出、孤儿进程、僵尸进程 概念及代码示例 [Linux高并发服务器开发]
目录 一.进程退出 二.孤儿进程 三.僵尸进程 一.进程退出 #include <stdlib.h> void exit ( int status ); #include <uni ...
- Linux中的进程是僵尸进程还是僵死进程
在 Linux 中,进程可能是僵尸进程或僵死进程. 僵尸进程是一种已经结束运行但还没有被父进程回收的进程.当父进程没有调用 wait 或 waitpid 函数来回收子进程的结束状态时,子进程就会成为僵 ...
最新文章
- firefox固定为应用标签的功能很好用
- Hillstone 防火墙备份脚本
- mongodb 事务_MongoDB 事务 — 基础入门篇
- 结合泛函极值_第2章泛函的极值.doc
- 对Servlet容器的补充
- LVM--逻辑卷管理
- python run之后出现>>> runfile(‘F:xxx.py‘, wdir=‘F:xxx‘) 快速干掉它的办法
- oracle数据设置为ull,IMX6ULL启动和烧写
- 阿里达摩院拿什么救人?
- 如何快速打通 Docker 镜像发布流程?
- Response 与 Cookie
- Redis更新数据的时候如何不重置过期时间
- PyHook3简明教程
- java并发编程(三)--java中的锁(Lock接口和队列同步器AQS)
- 即时通讯软件会取代电子邮件吗?
- 手机内存清理软件,让你的手机更轻更快!
- 高速窄脉冲峰值保持设计
- 以太网的分层架构_工业以太网中层次拓扑结构对网络性能的影响
- 汽车租赁小项目(java)
- W-Hive 支持苹果 iOS16 新版本
热门文章
- php数据库录入和输出,PHP数据库之CURD操作
- 如何解决编程的误差问题_柏威机械丨高精密零件加工是如何解决误差精度问题的?...
- java1234小峰推荐书籍_java1234 webservice 第2 课 cfx实现
- mysql数据库生成json_Python3实现 将MySQL数据库中的记录生成JSON数据
- arcgis python教程视频_arcgispython教程
- Python,yyds!
- 整理一份程序员常用的各类工具、技术站点
- 字符串在Python内部是如何省内存的
- matlab 高斯模糊_摸鱼 | 茴香豆的“茴”有四种写法,模糊有几种糊法?
- redis特点单进程单线程高性能服务器,Redis为什么是单线程?Redis又为什么这么快!...