Linux上下文切换分析(附vmstat,pidstat命令详解)


vmstat命令
使用vmstat命令分析虚拟内存数据

vmstat 5 #每隔5秒输出1组数据

​​​​在这里插入图片描述

cs(context switch)是每秒上下文切换的次数。

in(interrupt)则是每秒中断的次数。

r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。

b(Blocked)则是处于不可中断睡眠状态的进程数。

us(User) 用户态运行占比

这里重点关注cs列

vmstat 只给出了系统总体的上下文切换情况,要想查看每个进程的详细情况,需要用 pidstat 命令。给它加上 -w 选项,你就可以查看每个进程上下文切换的情况了(-w参数:Report task switching activity (kernels 2.6.23 and later only).)。

pidstat 命令

pidstat -w 5 # 每隔5秒输出

在这里插入图片描述

这个结果中有两列内容是我们的重点关注对象。一个是 cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数,另一个则是 nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数。

自愿上下文切换:是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换(cswch/s: Total number of voluntary context switches the task made per second. A voluntary context switch occurs when a task blocks because it requires a resource that is unavailable.)。

非自愿上下文切换:是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。(nvcswch/s:Total number of non voluntary context switches the task made per second. A invol‐ untary context switch takes place when a task executes for the duration of its time slice and then is forced to relinquish the processor.)

每秒上下文切换多少次才算正常呢?

“这个数值其实取决于系统本身的 CPU 性能。在我看来,如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级的增长时,就很可能已经出现了性能问题。这时,你还需要根据上下文切换的类型,再做具体分析。比方说:自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题;非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈;中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过查看 /proc/interrupts 文件来分析具体的中断类型。”

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
上下文切换是指当CPU从一个任务切换到另一个任务时,需要保存当前任务的上下文信息,并加载下一个任务的上下文信息。在Linux系统中,可以使用vmstat命令、pidstat命令、/proc/interrupts文件来查看系统的上下文切换情况。 上下文切换的主要原因有几点: 1. 多任务调度:操作系统需要将CPU资源在多个任务之间进行切换,以实现任务的并发执行。 2. 中断处理:当系统接收到硬件中断信号时,需要暂停当前任务的执行,转而处理中断请求。 3. 用户态与内核态的切换:当用户态进程需要调用内核服务时,会触发上下文切换上下文切换涉及到的资源主要有寄存器、内存、页表等。上下文切换次数过多会导致CPU的资源浪费,降低系统的执行效率。 根据引用的分析上下文切换共分为三种情况: 1. 自愿上下文切换:当一个任务需要等待某个事件的完成时,会主动释放CPU,从而触发自愿上下文切换。 2. 非自愿上下文切换:当一个任务的时间片用完或发生硬件中断等原因时,会被系统强制调度,触发非自愿上下文切换。 3. 中断上下文切换:当系统接收到硬件中断信号时,会从当前任务切换到中断处理程序,进行中断处理。 至于您提到的Linux上下文切换的实战,可以使用vmstat命令、pidstat命令和/proc/interrupts文件来观察系统的上下文切换情况。具体的使用方法可以参考相关文档或在线资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值