问题: 系统的内核负载偏高
可以看到 user 以及si hi 也就是 用户态 软中断 硬件中断很低,只是 sy 偏高。
同时cpu 负载1-5-15分钟为:8.77 9.15 9.55
首先面对cpu 高问题我们有什么工具 需要查看什么指标:https://www.cnblogs.com/codestack/p/12570863.html 请参考这篇文档
平均负载 |
uptimetop |
uptime 简单展示最近一段时间的平均负载top 展示更多指标 |
CPU 使用率 |
vmstat mpstat top sar /proc/stat |
top、vmstat、mpstat 只可以动态查看当前,而 sar 可以查看历史/proc/stat 是其他性能工具的数据来源 |
进程 CPU 使用率 |
top pidstatps htop atop |
top、ps 可以以排序方式展示进程 CPU、pidstat 不可排序展示htop、atop 则以不同颜色展示各类数据更直观 |
系统上下文切换 |
vmstat |
展示上下文切换此时、运行状态、不可中断状态进程数量 |
进程上下文切换 |
pidstat |
展示项很多,包括进程上下文切换信息 |
软中断 |
top /proc/softirqsmpstat |
top 可查看软中断 CPU 使用率/proc/softirqs 和 mpstat 则可以查看每个 CPU 上的累计信息 |
硬中断 |
vmstat/proc/interrupts |
vmstat 查看总中断次数信息/proc/interrupts 查看各种中断在每个 CPU 核心上的累计信息 |
可以看到 进程上下文切换和平时一样。中断也是还行
此时就猜测 系统调用了;使用perf 工具查看:
perf record -g -a sleep 10
可知 很多是 ethtool 问题导致。
通过 while true; do ps -elf ; sleep 0.5; done
可以找出 调用ethtool 的父进程。。。
一般来说:
系统CPU => vmstat 上下文切换次数 => pidstat 非自愿上下文切换次数 => 各类进程分析工具(perf strace ps execsnoop pstack)
用户CPU => pidstat 用户CPU => 一般是CPU计算型任务
僵尸进程 => 各类进程分析工具(perf strace ps execsnoop pstack)
平均负载 => vmstat 运行状态进程数 => pidstat 用户CPU => 各类进程分析工具(perf strace ps execsnoop pstack)
等待IO CPU => vmstat 不可中断状态进程数 => IO分析工具(dstat、sar -d)
硬中断 => vmstat 中断次数 => 查看具体中断类型(/proc/interrupts)
软中断 => 查看具体中断类型(/proc/softirqs) => 网络分析工具(sar -n、tcpdump) 或者 SCHED(pidstat 非自愿上下文切换)
问题二:
top 结果:
sy si 都高:
vmstat 的结果是:
对user 高的用户进程 经行strace
strace -c -f -p xxx
结果发现 select 有点高。 很奇怪 怎么select 和epoll 一起用
perf top 结果:
万恶的大锁