目录
sysbench --threads=10 --max-time=300 threads run
3.vmstat观察系统的cs(context switch)数据.
r:可运行进程队列长度达到了10,超过系统cpu个数2,有大量cpu竞争.
us+sy:≈100%,sy高达75%,说明内核占用cpu较高.
综上指标可得,系统的就绪队列中进程数较多,也就是运行中和等待cpu调度的进程数过多导致了大量的上下文切换,据查可知是sysbench频繁的上下文切换导致系统的cpu占用率过高.
1.如果cswh/s(自愿上下文切换)变多了,说明进程在资源等待,有可能发生了I/O瓶颈等问题.
2.如果nvcswh/s(非自愿上下文切换)变多了,说明进程被强制剥离cpu调度,也就是众多进程在抢夺cpu,说明cpu成了瓶颈.
3.in(中断)次数多了,说明cpu被中断处理程序占用,需要分析是哪种类型的中断.
1.使用 watch -d cat /proc/interrupts查看cpu中断数据.
a.top:查看系统总体cpu和内存使用情况,包括各进程的资源使用情况
top无法区分us%用户态cpu,sys%内核态cpu的使用情况.
b.pidstat 1 3:pidstat可查看用户态进程和内核态进程cpu使用情况.
vmstat:
vmstat命令可查看服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写等情况。这个命令是我查看Linux/Unix最喜爱的命令,相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样).
1.从系统层面看:vmstat 1 3
vmstat 1 3:每个1秒抓取一次,总共抓取3次.
重点关注:
r: 运行队列中进程数(就是说多少个进程正在运行或可运行) ,当这个值超过了CPU数目,
就会出现CPU瓶颈了.
b: 表示阻塞的进程.
swpd: 交换区内存已使用的大小,如果大于0,表示你的机器物理内存不足了.
free: 空闲的物理内存的大小.
cache:pagecache(页缓存)直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的
一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时
buffer/cached会很快地被使用。
si: 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露
so: 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi:系统上所有的磁盘和其他块设备每秒接收的块数量,1块=1kb
bo: 块设备每秒发送的块数量.
bi+bo值过大,且wa值较大,表明系统磁盘IO瓶颈.
in: 每秒CPU的中断次数,包括时间中断
cs: 系统层面看每秒上下文切换次数.上下文切换次数过多表示你的CPU大部分浪费在上下文
切换.
in+cs越大,说明内核消耗cpu越多.
us: 用户进程CPU时间
sy: 系统CPU时间
id: 空闲 CPU时间
wa: 等待IO CPU时间,一般超过20%就说明I/O等待严重.
2.从进程层面看:pidstat -w
-u 默认的参数,显示各个进程的CPU使用统计
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号
-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息
cswch/s:表示进程每秒自愿进行上下文切换的次数.
nvcswch/s:表示进程每秒非自愿进行上下文切换的次数.
3.从线程层面看上下文切换:pidstat -wt
-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息
4.案例:
1.使用sysbench模拟多线程切换.
yum install -y sysbench
sysbench --threads=10 --max-time=300 threads run
模拟10个线程,运行300s.
2.查看系统平均负载:watch -d uptime.
3.vmstat观察系统的cs(context switch)数据.
r:可运行进程队列长度达到了10,超过系统cpu个数2,有大量cpu竞争.
in:终端次数飙升
cs:上下文切换次数从12次/s飙升至110万次/s.
us+sy:≈100%,sy高达75%,说明内核占用cpu较高.
4.使用pidstat -w观察进程级别的cs数据.
发现sysbench的cswch/s和nvcswh/s数据为0,那是因为pidsata默认查看的是进程级别的
数据,sysbench发起的是线程负载,所以我们需要查看线程级别的数据.
5.使用pidstat -wt观察线程级别的cs数据.
5.案例分析:
综上指标可得,系统的就绪队列中进程数较多,也就是运行中和等待cpu调度的进程数过多导致了大量的上下文切换,据查可知是sysbench频繁的上下文切换导致系统的cpu占用率过高.
6.针对上下文切换类型分析:
1.如果cswh/s(自愿上下文切换)变多了,说明进程在资源等待,有可能发生了I/O瓶颈等问题.
2.如果nvcswh/s(非自愿上下文切换)变多了,说明进程被强制剥离cpu调度,也就是众多进程在抢夺cpu,说明cpu成了瓶颈.
3.in(中断)次数多了,说明cpu被中断处理程序占用,需要分析是哪种类型的中断.
1.使用 watch -d cat /proc/interrupts查看cpu中断数据.
2.使用cpu使用率描述cpu的性能
a.top:查看系统总体cpu和内存使用情况,包括各进程的资源使用情况
top无法区分us%用户态cpu,sys%内核态cpu的使用情况.
b.pidstat 1 3:pidstat可查看用户态进程和内核态进程cpu使用情况.
c.ps:显示每个进程的资源使用情况.