linux僵尸进程有io阻塞,linux性能-04 出现大量中断进程和僵尸进程

文章目录

基础知识

系统中进程运行状态

僵尸进程

不可中断进程和僵尸进程的简单定义

问题解决思路

遇到iowait不断增高,并且cpu占用过高的情况解决 思路

僵尸进程问题解决

ps 关于iO增高

基础知识

系统中进程运行状态

R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。

D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。

Z 是 Zombie 的缩写,如果你玩过“植物大战僵尸”这款游戏,应该知道它的意思。它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。

S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。

I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高, I 状态的进程却不会。

T/t 则是stopped或者traced的缩写,表示进程处于暂停或者跟踪的状态

x 也就是dead的缩写,表示进程已经死亡,我们不会在top或者ps中看到他

僵尸进程

正常情况下当一个进程创建了子进程后,他应该会通过调用系统调用wait()或者waitpid()等待子进程结束,回收子进程资源。

子进程结束后,会向他的父进程发送sigchld信号,所以父进程还可以注册sigchld信号的处理函数,异步回收资源

如果父进程没有这么做,或者子进程执行的太快,父进程还没来得及处理子进程状态,子进程就已经提前退出了,那这个时候子进程就会变成僵尸进程

不可中断进程和僵尸进程的简单定义

不可中断状态,一般表示进程正在跟硬件交互,为了保护进程数据与硬件一致,系统不允许其他进程或中断打断该进程。

僵尸进程表示进程已经退出,但它的父进程没有回收该进程所占用的资源。

问题解决思路

遇到iowait不断增高,并且cpu占用过高的情况解决 思路

1,用 dststat 找到iowait升高是因为读还是写

2,用 top 命令找到状态为D(不可中断)的进程号

3,指定进程看他的io情况

# -d 展示 I/O 统计数据,-p 指定进程号,间隔 1 秒输出 3 组数据

$ pidstat -d -p 4344 1 3

06:38:50 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command

06:38:51 0 4344 0.00 0.00 0.00 0 app

06:38:52 0 4344 0.00 0.00 0.00 0 app

06:38:53 0 4344 0.00 0.00 0.00 0 app

4 看第三步的数据都挺正常,那就直接去掉 -p 看所有的

5 通过第三步或者第四步可以确定导致iowait的进程,然后开始用strace -p pid跟踪进程 或者用perf top 查看进程 的调用栈发现问题

僵尸进程问题解决

找到僵尸进程的Pid然后用pstree找到他的父进程再次进行 分析

# -a 表示输出命令行选项

# p表PID

# s表示指定进程的父进程

$ pstree -aps 3084

systemd,1

└─dockerd,15006 -H fd://

└─docker-containe,15024 --config /var/run/docker/containerd/containerd.toml

└─docker-containe,3991 -namespace moby -workdir...

└─app,4009

└─(app,3084)

ps 关于iO增高

磁盘 I/O 导致了 iowait 升高,不过, iowait 高不一定代表 I/O 有性能瓶颈。当系统中只有 I/O 类型的进程在运行时,iowait 也会很高,但实际上,磁盘的读写远没有达到性能瓶颈的程度。

如果遇到这种问题可以先用 dtstat 和 pidstat 确认 是不是磁盘的问题,然后再跟进相关进程进一步确定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值