Linux上下文切换分析工具
命令介绍
每隔5秒输出系统总体上下文切换情况
vmstat 5
列名 |
含义 |
cs |
每秒上下文切换的次数 |
in |
每秒中断的次数 |
r |
正在运行和等待CPU的进程数 |
b |
不可中断睡眠状态的进程数 |
每隔5s输出进程上下文切换情况
pidstat -w 5
列名 |
含义 |
cswch |
每秒自愿上下文切换(进程无法获取资源,等待资源)次数 |
nvcswch |
每秒非自愿上下文切换(系统强制调度进程,争抢CPU)次数 |
案例分析
安装多线程测试工具sysbench
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
yum -y install sysbench
10个线程运行5分钟模拟多线程切换
sysbench --threads=10 --max-time=300 threads run
r列的正在运行和等待CPU的进程数从1上升到 8,远远超过系统CPU个数 1,意味着大量的CPU竞争。
cs列的上下文切换次数从2k上升到1660k。
us(user)和 sy(system)列的CPU使用率合上升到100%,CPU主要被内核占用。
系统正在运行和等待CPU的进程数过多导致大量的上下文切换,上下文切换又导致了系统 CPU的占用率升高。
pidstat -w -u 1
-w表示输出进程切换指标,-u表示输出CPU使用指标
sysbench占用的CPU使用率最高。
pidstat -wt 1
-wt表示输出线程的上下文切换指标
sysbench线程上下文切换次数很多。