zoukankan      html  css  js  c++  java
  • 上下文切换

    上下文切换
    一、运行vmstat,观察上下文切换的情况:
    vmstat 1
    R列,就绪队列的长度远远超过CPU个数,所以肯定会有大量的CPU竞争
    us和sy,这两列的CPU使用率,其中系统CPU使用率很高,说明CPU主要被内核占用
    in列:中断次数很高,说明中断处理也是个潜在的问题
    综合这几个指标,可以知道,系统的就绪队列过长,也就是正在运行和等待CPU的进程数过多,导致了大量的上下文切换,而上下文切换又导致了系统CPU使用率升高。
    二、继续分析,用pidstat来看一下,CPU和进程上下文切换的情况:  
    -wt 参数表示输出线程的上下文切换指标
    pidstat -wt 1
    pidstat的输出中,可以看到是哪个线程上下文切换过多。
    三、接下来,继续分析中断次数上升的根源(中断只发生在内核态)
    从/proc/interrupts这个只读文件读取,提供了一个只读的中断使用情况
    watch -d cat /proc/interrupts(动态显示)

    总结:
     上下文切换指标:
     (1).上下文切换次数取决于系统本身的CPU性能,如果系统的上下文切换次数比较稳定,那么从数百到1万以内都是正常的
     (2).当上下文切换次数超过1万次,或者切换次数出现数量级增长时,就很可能已经出现了性能问题
     同一个进程下线程上下文切换,因为共享虚拟内存,切换过程中,虚拟内存这些资源保持不变,只需要切换线程的私有数据,寄存器等不共享的数据。(多线程代替多进程)
     自愿上下文切换变多了,说明进程都在等待资源,有可能发生IO等其他问题
     非自愿上下文切换变多了,说明进程都在被强制调度,都在争抢CPU,说明CPU的确成了瓶颈
     中断上下文切换变多了,说明CPU被中断处理程序占用,需要通过查看 /proc/interrupts文件分析具体的中断类型

  • 相关阅读:
    1029 旧键盘 (20 分)
    1028 人口普查 (20 分)
    1026 程序运行时间 (15 分
    1025 反转链表 (25 分
    1024 科学计数法 (20 分
    1023 组个最小数 (20 分)
    将命令的输出保存到文件
    使用与管理控制台历史
    度量命令执行时间
    检查最后运行命令的状态
  • 原文地址:https://www.cnblogs.com/jingdenghuakai/p/13187857.html
Copyright © 2011-2022 走看看