一台12核机器做k8s worker节点 top查看 us只有5% 但是wa有48% load 12 但是iostat 查看磁盘几乎没什么负载 %util基本是0没什么读写 ,不知道后面应该怎么检查为啥iowait会那么高
1条回答 默认 最新
勇敢的星火 2024-07-23 15:18关注碰到 iowait 升高时,需要先用 dstat、pidstat 等工具,确认是不是磁盘 I/O 的问
题,然后再找是哪些进程导致了 I/O。 来自极客时间-性能优化实战08节的学习;望采纳~等待 I/O的 CPU 使用率(以下简称为 iowait)升高,也是最常见的一个服务器性能问题;当 iowait 升高时,进程很可能因为得不到硬件的响应,而长时间处于不可中断状态。从 ps或者 top 命令的输出中,你可以发现它们都处于 D 状态,也就是不可中断状态(Uninterruptible Sleep); D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。 不可中断状态,这其实是为了保证进程数据与硬件状态一致,并且正常情况下,不可中断状态在很短时间内就会结束。所以,短时的不可中 断状态进程,我们一般可以忽略。 如果系统或硬件发生了故障,进程可能会在不可中断状态保持很久,甚至导致系统中出现大量不可中断进程。 iowait 高不一定代表 I/O 有性能瓶颈。当系统中只有 I/O 类型的进程在运行时,iowait 也会很高,但实际上,磁盘的读写远没有达到性能瓶颈的程度。 因此,碰到 iowait 升高时,需要先用 dstat、pidstat 等工具,确认是不是磁盘 I/O 的问 题,然后再找是哪些进程导致了 I/O。 等待 I/O 的进程一般是不可中断状态,所以用 ps 命令找到的 D 状态(即不可中断状态) 的进程,多为可疑进程。但这个案例中,在 I/O 操作后,进程又变成了僵尸进程,所以不能用 strace 直接分析这个进程的系统调用。 这种情况下,我们用了 perf 工具,来分析系统的 CPU 时钟事件,最终发现是直接 I/O 导致的问题。这时,再检查源码中对应位置的问题,就很轻松了。 而僵尸进程的问题相对容易排查,使用 pstree 找出父进程后,去查看父进程的代码,检查wait() / waitpid() 的调用,或是 SIGCHLD 信号处理函数的注册就行了。解决 无用评论 打赏 举报