当前位置: 首页 > article >正文

Linux CPU性能优化:D状态和Z状态排查与处理

文章目录一、Linux进程五大基本状态1. 运行状态RRunning / Runnable2. 可中断睡眠状态SInterruptible Sleep3. 不可中断睡眠状态DUninterruptible Sleep4. 停止状态TStopped / Traced5. 僵死状态ZZombie / Defunct二、D 状态和Z状态排查1.D 状态排查方法1. wchan stack2. hung_task2. Z 状态排查方法3.防止Z状态产生一、Linux进程五大基本状态在 Linux 系统中常用的五大基本状态通过 ps、top 等命令可查看分别是1. 运行状态RRunning / Runnable含义进程当前正在运行占用 CPU或者处于可运行队列中、只要获得 CPU 时间片就能立刻执行。特点包括正在 CPU 上执行的进程以及就绪等待调度的进程。这是进程争取 CPU 时的活跃状态。示例一个不停计算的 while(1) 程序通常处于 R 状态在多核系统上多个 R 状态进程可能同时运行。2. 可中断睡眠状态SInterruptible Sleep含义进程正在等待某个事件完成如等待 I/O 输入、等待锁、等待信号等并且该睡眠可以被信号唤醒。特点最常见的睡眠状态大部分时间系统进程都在此状态。当等待的资源可用或收到信号时进程会回到 R 状态。可以被 kill 命令或其它信号打断。示例Shell 等待用户输入、网络服务等待客户端连接、进程调用 sleep() 或 nanosleep()。3. 不可中断睡眠状态DUninterruptible Sleep含义进程正在等待某些不可被中断的 I/O 操作如直接读写磁盘、等待硬件响应期间无法响应任何信号。特点通常用于磁盘 I/O、某些设备驱动中的关键操作。即使发送 SIGKILL 也无法立即终止该进程必须等待 I/O 完成或系统重启。这种设计是为了防止在关键数据写回磁盘时被中断导致数据不一致。示例sync 命令刷新缓冲区、dd 直接写入块设备、NFS 因网络故障僵住时的等待操作。注意短时间的 D 状态是正常的若长时间存在且数量增多往往提示 I/O 瓶颈或存储设备问题。4. 停止状态TStopped / Traced含义进程的执行被暂停通常是由于收到了 SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU 等信号或者被调试器如 gdb暂时接管。特点进程不会获得 CPU 时间也不响应普通信号除 SIGKILL、SIGCONT 外。可以通过发送 SIGCONT 信号让进程恢复到 R 状态继续执行。示例在终端按下 CtrlZ 将前台进程挂起 或 gdb 中设置断点后命中暂停 或 使用 kill -SIGSTOP 显式暂停。5. 僵死状态ZZombie / Defunct含义进程已经结束运行调用了 exit 或收到终止信号但其进程描述符task_struct仍然保留等待父进程调用 wait() 或 waitpid() 来读取其退出状态。特点该进程不再占用任何内存或 CPU 资源只保留内核中的一个极小结构体。无法被杀死因为它已经“死”了只能通过让父进程回收它来消除。若父进程不回收且不退出僵尸进程会一直存在若父进程先退出僵尸进程会被 initPID1进程收养并自动回收。示例父进程编写不当未调用 wait导致子进程结束后一直处于 Z 状态。大量僵尸进程可能耗尽进程号上限影响系统运行。本文将具体介绍D状态和Z状态的排查与处理。二、D 状态和Z状态排查1.D 状态排查方法1. wchan stackwchanwait channel能看到 D 状态进程“卡”在内核的哪个具体函数例如ps-eopid,state,wchan,comm|awk$2D输出PID S WCHAN COMMAND123D io_scheduledd456D wait_on_page_bit mysqld这个例子中进程dd(PID 123) 卡在了 io_schedule 即磁盘读写可能的原因是磁盘慢、坏道、NFS 挂了。而进程mysqld(PID 456)卡在了wait_on_page_bit即内存页回写可能的原因是内存压力大。也可以直接读取某进程的wchan例如cat/proc/798/wchan可能输出为rpc_wait_bit_killable即卡在RPC 层。然后可以通过stack中内容进一步排查具体卡在了哪个函数例如在刚才的例子中继续检查stack:cat/proc/789/stack可能输出为[0]rpc_wait_bit_killable0x??/0x??[sunrpc][0]__rpc_execute0x??/0x??[sunrpc][0]rpc_run_task0x??/0x??[sunrpc][0]nfs_write_rpc0x??/0x??[nfs][0]nfs_file_write0x??/0x??[nfs][0]vfs_write0x??/0x??[0]sys_write0x??/0x??由此能看出是 NFS 写操作卡在 RPC 层。2. hung_task当 D 状态进程超过 120 秒默认内核会主动打印带有hung task 关键字的log因此使用dmesg 指令可以可以获取dmesg-T|grephung_task可能输出为[Thu May2510:15:322026]INFO: task dd:123 blockedformorethan120seconds.[Thu May2510:15:322026]Tainted: G W[Thu May2510:15:322026]echo 0 /proc/sys/kernel/hung_task_timeout_secsdisables this message.[Thu May2510:15:322026]ddD12310x00000000[Thu May2510:15:322026]Call Trace:[Thu May2510:15:322026][ffffffffa0000000]io_schedule0x??/0x??可以看出 ddPID 123卡在 io_schedule 超过 120 秒。2. Z 状态排查方法wchan、hung_task 等指令对Z状态无用我们需要一直找到进程的父进程进行处理。例如我们已经找到了一个Z状态进程psaux|awk$8Z输出USERPID STAT COMMAND root123Z[sh]defunct我们需要找到它的父进程ps-oppid-p123例如输出456我们通知父进程回收kill-CHLD456以此来回收Z状态子进程123.如果不行可以选择直接杀死父进程kill-94563.防止Z状态产生最好防止Z状态产生的方式实在代码中确保父进程回收子进程的退出状态。例如一个非阻塞式回收的代码示例如下#includesys/wait.h#includesignal.h#includeunistd.h#includestdio.h#includeerrno.hvoidsigchld_handler(intsigno){intsaved_errnoerrno;while(waitpid(-1,NULL,WNOHANG)0);// 回收所有已结束的子进程errnosaved_errno;}intmain(){structsigactionsa;sa.sa_handlersigchld_handler;sigemptyset(sa.sa_mask);sa.sa_flagsSA_RESTART|SA_NOCLDSTOP;sigaction(SIGCHLD,sa,NULL);pid_t pidfork();if(pid0){printf(Child exiting\n);return0;}elseif(pid0){printf(Parent doing other work...\n);sleep(2);// 模拟父进程的工作}return0;}或者使用通过第二次 fork使实际工作的子进程成为孤儿被 initPID1接管。init 会自动回收子进程从而避免僵尸。#includesys/wait.h#includeunistd.h#includestdio.hintmain(){pid_t pidfork();if(pid0){// 第一次子进程pid_t pid2fork();if(pid20){// 第二次子进程实际工作的进程printf(Working child (will be adopted by init)\n);sleep(2);return0;}elseif(pid20){// 第一次子进程直接退出使第二次子进程成为孤儿return0;}}elseif(pid0){// 父进程回收第一次子进程很快完成wait(NULL);printf(Parent: first child reaped, grandchild adopted by init\n);sleep(3);}return0;}

相关文章:

Linux CPU性能优化:D状态和Z状态排查与处理

文章目录一、Linux进程五大基本状态1. 运行状态(R,Running / Runnable)2. 可中断睡眠状态(S,Interruptible Sleep)3. 不可中断睡眠状态(D,Uninterruptible Sleep)4. 停止…...

yuzu模拟器:在PC上完美运行Switch游戏的终极解决方案

yuzu模拟器:在PC上完美运行Switch游戏的终极解决方案 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想要在电脑上体验任天堂Switch游戏的魅力吗?yuzu模拟器作为目前最成熟的开源Switch模拟…...

机器学习在宇宙中微子快味转换检测中的实践:从逻辑回归到天体物理模拟集成

1. 项目概述:当机器学习遇见宇宙深处的“幽灵粒子” 在宇宙最狂暴的舞台——核心坍缩超新星(CCSN)和双中子星并合(NSM)事件的中心,上演着一场肉眼无法观测的微观物理盛宴。这里的主角是中微子,这…...

用Arduino改造TDA7010T FM收音机:数字调谐与自动搜台实战

1. 项目概述:当复古芯片遇上现代微控制器翻出抽屉角落里那个积灰的Kemo B156N套件时,我压根没想到它会变成一个如此有趣的周末项目。这个套件的核心,是一颗来自上世纪八十年代的FM收音机芯片——TDA7010T。当年,它和它的前身TDA70…...

抖音批量下载工具:免费获取无水印视频的终极解决方案

抖音批量下载工具:免费获取无水印视频的终极解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

Avidemux视频编辑工具终极指南:5个简单步骤快速上手专业剪辑

Avidemux视频编辑工具终极指南:5个简单步骤快速上手专业剪辑 【免费下载链接】avidemux2 Avidemux2, simple video editor 项目地址: https://gitcode.com/gh_mirrors/avi/avidemux2 你是否曾经因为复杂的视频编辑软件而头疼?想要一个免费、开源且…...

【Sora 2 HDR生成黄金公式】:曝光补偿系数×动态范围压缩阈值×时域一致性权重=可商用HDR帧率(附Python验证脚本)

更多请点击: https://codechina.net 第一章:Sora 2 HDR视频生成黄金公式的提出与商业意义 Sora 2 的HDR视频生成能力不再依赖传统多曝光融合或后期调色管线,而是通过一个端到端可微分的物理感知渲染公式实现原生高动态范围建模。该公式被业界…...

10.刷机变砖、IMEI 丢失、基带未知、触控失灵?一站式终极修复方案

摘要 本文面向具备基础计算机操作能力的维修从业者与高级用户,系统讲解当前主流品牌手机(华为、小米、OPPO、vivo、一加、苹果)的刷机与维修核心流程。内容涵盖底层引导架构差异、Fastboot/Recovery/DFU模式操作规范、分区表保护策略、驱动兼容性处理以及常见硬件故障的软件…...

FModel完整部署指南:UE5资源提取与逆向解析实战

1. 为什么FModel不是“另一个UE资源查看器”,而是虚幻项目逆向分析的起点FModel虚幻引擎资源提取工具完整部署指南——这标题里藏着三个被多数人忽略的关键信号:“FModel”不是泛指,“虚幻引擎”特指UE4/UE5原生资产体系,“完整部…...

深度解析zenodo_get路径处理机制:如何优雅处理科研数据下载的目录结构

深度解析zenodo_get路径处理机制:如何优雅处理科研数据下载的目录结构 【免费下载链接】zenodo_get Zenodo_get: Downloader for Zenodo records 项目地址: https://gitcode.com/gh_mirrors/ze/zenodo_get 在科研数据管理领域,高效的数据下载工具…...

开发者在构建多模态AI应用时如何借助TaoToken简化模型集成

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 开发者在构建多模态AI应用时如何借助TaoToken简化模型集成 构建一个集成了文本、图像等多模态能力的AI应用,开发者常常…...

框架组件识别:从版本号到利用链的渗透实战指南

1. 这不是“扫个版本号”那么简单:框架组件识别在真实渗透中的战略定位 很多人看到“框架组件识别”,第一反应是跑个whatweb、wappalyzer,截图发报告里写一句“识别到Spring Boot 2.6.3”,就算交差了。我干这行十多年,…...

终极指南:5分钟搞定淘宝淘金币全任务自动化脚本

终极指南:5分钟搞定淘宝淘金币全任务自动化脚本 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 你是否厌倦…...

安卓逆向实战:Frida内存砸壳提取DEX原理与技巧

1. 这不是“脱壳”,是逆向工程中一次精准的内存手术你打开一个加固过的安卓App,用常规工具解包,发现classes.dex只有几KB,里面全是混淆到面目全非的壳代码;用dex2jar反编译,报错“Not a valid dex file”&a…...

条件Shapley值:用shapr包实现更公平的模型可解释性

1. 项目概述与核心价值 如果你在数据科学或机器学习领域工作过一段时间,尤其是在需要向业务方或非技术团队解释模型决策的场景里,你肯定遇到过这样的困境:模型预测准确率很高,但当别人问“为什么这个客户的贷款申请被拒绝了&#…...

中兴新支点NewStartOS初体验:从激活到日常使用,聊聊这个国产Linux桌面的真实感受

中兴新支点NewStartOS深度体验:一个技术爱好者的真实使用笔记第一次启动中兴新支点NewStartOS时,那个简洁的登录界面就给我留下了不错的印象。作为一个长期在Windows和macOS之间切换的用户,这次尝试国产Linux桌面系统,更像是一次充…...

YOLO训练前数据检查必备:一个脚本批量转换LabelImg的txt标签并可视化核对

YOLO训练前数据检查实战:批量转换与可视化核验脚本开发指南 在计算机视觉项目的实际落地过程中,数据质量往往比模型架构更能决定最终效果的上限。许多团队花费大量时间调整超参数和网络结构,却忽略了最基础的标注数据验证环节。当使用LabelIm…...

5分钟掌握res-downloader:跨平台资源下载的终极指南

5分钟掌握res-downloader:跨平台资源下载的终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否经常在…...

在github上快速接入taotoken大模型api的python调用教程

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在GitHub上快速接入Taotoken大模型API的Python调用教程 对于希望快速集成大模型能力的开发者而言,找到一个统一、便捷的…...

Python之encode-cli包语法、参数和实际应用案例

Python encode-cli包完整使用指南 encode-cli 是Python生态中轻量、高效的命令行编码/解码工具包,专注于提供主流编码格式的快速转换,支持命令行直接调用,无需编写复杂Python代码,适用于数据加密、文本转码、URL处理、Base64转换等…...

从无人机到自动驾驶:一文读懂ROS中ENU、NED、相机坐标系到底怎么用

从无人机到自动驾驶:ROS中ENU、NED与相机坐标系实战指南 当你在无人机上安装Realsense相机时,是否遇到过相机数据与飞控数据"对不上"的情况?或者在自动驾驶项目中,GPS的北东地坐标如何与激光雷达的东北天坐标对齐&#…...

将Taotoken作为统一AI网关整合进企业现有微服务架构的实践思路

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 将Taotoken作为统一AI网关整合进企业现有微服务架构的实践思路 在构建以AI能力驱动的现代应用时,中型及以上的企业常面…...

从B站缓存困境到MP4自由:m4s-converter完整解决方案

从B站缓存困境到MP4自由:m4s-converter完整解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当B站视频突然下架,那…...

3个核心问题:如何突破Cursor AI的使用限制并持续获得Pro功能体验?

3个核心问题:如何突破Cursor AI的使用限制并持续获得Pro功能体验? 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: …...

3分钟掌握Topit:Mac窗口置顶终极指南,让多任务处理效率翻倍!

3分钟掌握Topit:Mac窗口置顶终极指南,让多任务处理效率翻倍! 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经在Ma…...

网盘直链下载助手:九大主流平台高速下载终极指南

网盘直链下载助手:九大主流平台高速下载终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...

摆脱论文困扰!2026年最值得拥有的专业AI智能降重工具

2026年论文降AI率工具已从“基础改写”升级为多维度智能优化系统,核心评价维度涵盖AI生成内容识别精度、语义逻辑一致性、学术格式合规性、查重适配能力及多语言处理水平。本次测评覆盖6款主流工具,测试场景包括中文与英文论文、全流程与专项功能、免费与…...

PlayAI实时翻译如何重构跨国协作效率?揭秘2024企业级应用的3个关键转折点

更多请点击: https://codechina.net 第一章:PlayAI实时翻译如何重构跨国协作效率?揭秘2024企业级应用的3个关键转折点 在远程办公常态化与全球供应链深度耦合的背景下,PlayAI 实时翻译已从辅助工具跃升为协同基础设施。其核心突破…...

C语言有符号和无符号在内存中的存储方式区别小结

在 C 语言中,​有符号类型(如 signed char、signed int)和无符号类型(如 unsigned char、unsigned int)在内存中的存储方式本质上没有区别——它们都是以二进制位的形式存储数值的。两者的核心差异体现在对二进制位的解…...

2026年新能源人才全球本地化策略

导读:报告基于领英行业洞察,聚焦 2026 年全球新能源行业发展格局、中国企业出海现状、人才供需痛点及全球化人才本地化落地策略,为新能源企业海外人才招聘、培养与组织管理提供完整解决方案。关注公众号:【互联互通社区】&#xf…...