系统中出现大量不可中断进程和僵尸进程(理论)

这篇具有很好参考价值的文章主要介绍了系统中出现大量不可中断进程和僵尸进程(理论)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 进程状态

当 iowait 升高时,进程很可能因为得不到硬件的响应,而长时间处于不可中断状态。从 ps 或者 top 命令的输出中,你可以发现它们都处于 D 状态,也就是不可中断状态(Uninterruptible Sleep)。

R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。
D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
Z 是 Zombie 的缩写,如果你玩过“植物大战僵尸”这款游戏,应该知道它的意思。它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。
I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高, I 状态的进程却不会。
当然了,上面的示例并没有包括进程的所有状态。除了以上 5 个状态,进程还包括下面这 2 个状态。第一个是 T 或者 t,也就是 Stopped 或 Traced 的缩写,表示进程处于暂停或者跟踪状态。

向一个进程发送 SIGSTOP 信号,它就会因响应这个信号变成暂停状态(Stopped);再向它发送 SIGCONT 信号,进程又会恢复运行(如果进程是终端里直接启动的,则需要你用 fg 命令,恢复到前台运行)。

而当你用调试器(如 gdb)调试一个进程时,在使用断点中断进程后,进程就会变成跟踪状态,这其实也是一种特殊的暂停状态,只不过你可以用调试器来跟踪并按需要控制进程的运行。另一个是 X,也就是 Dead 的缩写,表示进程已经消亡,所以你不会在 top 或者 ps 命令中看到它。

先看不可中断状态,这其实是为了保证进程数据与硬件状态一致,并且正常情况下,不可中断状态在很短时间内就会结束。
所以,短时的不可中断状态进程,我们一般可以忽略。但如果系统或硬件发生了故障,进程可能会在不可中断状态保持很久,甚至导致系统中出现大量不可中断进程。这时,你就得注意下,系统是不是出现了 I/O 等性能问题。

如果父进程没这么做,或是子进程执行太快,父进程还没来得及处理子进程状态,子进程就已经提前退出,那这时的子进程就会变成僵尸进程。换句话说,父亲应该一直对儿子负责,善始善终,如果不作为或者跟不上,都会导致“问题少年”的出现。

通常,僵尸进程持续的时间都比较短,在父进程回收它的资源后就会消亡;或者在父进程退出后,由 init 进程回收后也会消亡。

一旦父进程没有处理子进程的终止,还一直保持运行状态,那么子进程就会一直处于僵尸状态。大量的僵尸进程会用尽 PID 进程号,导致新进程不能创建,所以这种情况一定要避免。

二 案例分析

1.准备工作
安装docker、sysstat、dstat 等工具,如 apt install docker.io dstat sysstat
dstat 是一个新的性能工具,它吸收了 vmstat、iostat、ifstat 等几种工具的优点,可以同时观察系统的 CPU、磁盘 I/O、网络以及内存使用情况。

安装完成后,我们首先执行下面的命令运行案例应用:

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

ps aux| grep app

系统中出现大量不可中断进程和僵尸进程(理论),linux,高并发、服务性能排查,linux,服务器
这个界面,我们可以发现多个 app 进程已经启动,并且它们的状态分别是 Ss+ 和 D+。其中,S 表示可中断睡眠状态,D 表示不可中断睡眠状态,我们在前面刚学过,那后面的 s 和 + 是什么意思呢?不知道也没关系,查一下 man ps 就可以。现在记住,s 表示这个进程是一个会话的领导进程,而 + 表示前台进程组。

这里又出现了两个新概念,进程组和会话。它们用来管理一组相互关联的进程,意思其实很好理解。

进程组表示一组相互关联的进程,比如每个子进程都是父进程所在组的成员;
而会话是指共享同一个控制终端的一个或多个进程组。
我们通过 SSH 登录服务器,就会打开一个控制终端(TTY),这个控制终端就对应一个会话。而我们在终端中运行的命令以及它们的子进程,就构成了一个个的进程组,其中,在后台运行的命令,构成后台进程组;在前台运行的命令,构成前台进程组。

系统中出现大量不可中断进程和僵尸进程(理论),linux,高并发、服务性能排查,linux,服务器

第二点,僵尸进程在不断增多,说明有程序没能正确清理子进程的资源。那么,碰到这两个问题该怎么办呢?

小结

今天我们主要通过简单的操作,熟悉了几个必备的进程状态。用我们最熟悉的 ps 或者 top ,可以查看进程的状态,这些状态包括运行(R)、空闲(I)、不可中断睡眠(D)、可中断睡眠(S)、僵尸(Z)以及暂停(T)等。
其中,不可中断状态和僵尸状态,是我们今天的重点。不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态我们通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。

空闲进程、不可中断进程和僵尸进程一般不能被kill-9 杀掉文章来源地址https://www.toymoban.com/news/detail-693398.html

到了这里,关于系统中出现大量不可中断进程和僵尸进程(理论)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Linux】详解进程状态之僵尸进程——孤儿进程

    【Linux】详解进程状态之僵尸进程——孤儿进程

    目录 🌞专栏导读 🌛什么是进程 ⭐什么是PCB?  🌛查看进程  🌛如何通过系统调用查看进程PID 🌛fork 🌞认识进程状态 🌛查看进程状态  🌛R状态  ⭐例如: 🌛S状态  🌛D状态  🌛T状态 🌛t状态: 🌛X状态  🌛Z状态 ⭐僵尸进程 ⭐僵尸进程的危害  🌛孤儿进程 🌟作

    2024年02月13日
    浏览(7)
  • Linux—进程状态、僵尸进程、孤独进程、优先级

    Linux—进程状态、僵尸进程、孤独进程、优先级

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在 Linux内核里,进程有时候也叫做任务)

    2024年02月05日
    浏览(7)
  • 【Linux深入剖析】进程状态---进程僵尸与孤儿

    【Linux深入剖析】进程状态---进程僵尸与孤儿

    📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 进程 = taskk_stuct + 可执行程序 进程不是一直在运行的 进程放在cpu上也不会一直运行的 它可能在等待某

    2024年03月18日
    浏览(15)
  • 【Linux取经路】探索进程状态之僵尸进程 | 孤儿进程

    【Linux取经路】探索进程状态之僵尸进程 | 孤儿进程

    进程状态是指在操作系统中,一个进程所处的不同运行状态,进程状态就决定了该进程接下来要执行什么任务。常见的进程状态有以下几种: 新建状态 :进程被创建但还没有被操作系统接受和分配资源。 就绪状态 :进程已经获得了所需的资源,并等待被调度执行。 运行状

    2024年02月12日
    浏览(13)
  • linux怎么杀僵尸进程

    在 Linux 中,可以使用 ps 和 kill 命令来杀死僵尸进程。 首先,使用 ps 命令查看当前系统中的进程,并找到僵尸进程的进程号(PID)。例如,在某些情况下,僵尸进程可能会在 STAT 列中显示为 Z ,表示进程处于僵尸状态。 然后,使用 kill 命令向该进程发送 SIGCHLD 信号,以终止该进

    2024年02月16日
    浏览(9)
  • Linux查看僵尸进程

    Linux查看僵尸进程

    1、查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程。 2、定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |grep -e ‘^[Zz]’定位僵尸进程以及该僵尸进程的父进程。 3、杀死僵尸进程 使用Kill -HUP 僵尸进程ID来杀死僵尸进程,往往

    2024年04月27日
    浏览(5)
  • 操作系统理论:Linux进程与进程状态(进程调度的大O(1)算法数据结构模型)

    操作系统理论:Linux进程与进程状态(进程调度的大O(1)算法数据结构模型)

    冯诺依曼体系的计算机在运行时,内存中会预加载许多程序(数据+运算指令集),然而CPU 同一时刻只能执行一个程序 (多个程序竞争CPU资源),此时就需要操作系统 对内存中的诸多程序进行管理 ,让CPU资源得到合理的分配,于是便有了进程的概念: 进程:描述程序的结构体对象( PCB结构体

    2024年02月15日
    浏览(12)
  • 【Linux】僵尸与孤儿 && 进程等待

    【Linux】僵尸与孤儿 && 进程等待

    目录 一,僵尸进程 1,僵尸进程 2,僵尸进程的危害 二,孤儿进程 1,孤儿进程 三,进程等待 1,进程等待的必要性 2,wait 方法 3,waitpid 方法 4,回收小结 1,僵尸进程 僵死状态(Zombies)是一个比较特殊的状态。 当进程退出并且父进程(使用wait()系统调用,后面讲) 没有读取

    2024年02月04日
    浏览(10)
  • 【Linux】进程状态&&僵尸进程和孤儿进程&&阻塞、挂起和运行

    【Linux】进程状态&&僵尸进程和孤儿进程&&阻塞、挂起和运行

    个人主页 : zxctscl 如有转载请先通知 上一篇博客中提到 【Linux】进程初步理解,这次继续来分享与进程有关的知识。 Linux的进程状态就是struct task_struct内部的一个属性。 为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在

    2024年04月14日
    浏览(10)
  • 【Linux】进程排队的理解&&进程状态的表述&&僵尸进程和孤儿进程的理解

    【Linux】进程排队的理解&&进程状态的表述&&僵尸进程和孤儿进程的理解

             进程不是一直运行的,进程可能会在等待某种软硬件资源。即使把进程加载到CPU中,也不是一直会运行的。而进程排队,一定是在等待某种软硬件资源(可以是CPU,键盘,磁盘,网卡等等设备......), 排队时是进程的PCB在排队 。 在这里就需要引入一个概念: 一

    2024年03月21日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包