文章目录
- [1 理论基础](#1 理论基础)
-
- [1.1 cpu load 运行队列](#1.1 cpu load 运行队列)
- [1.2 上下文切换](#1.2 上下文切换)
- [1.3 中断](#1.3 中断)
- [1.4 cpu usage](#1.4 cpu usage)
- [1.5 时间](#1.5 时间)
- [2 工具](#2 工具)
-
- [2.1 proc](#2.1 proc)
- [3 其他工具](#3 其他工具)
- [4 调优](#4 调优)
1 理论基础
1.1 cpu load 运行队列
Linux进程,要么是可运行状态,要么是阻塞状态。可运行不一定是正在运行,可能是正在等待进程调度。阻塞可能是在等待IO设备数据,也可能是在等待系统调用返回。可运行进程的队列越长,处于等待状态的进程就越多。
在一定的时间内,可运行进程个数的平均值,包括正在运行的进程,即平均负载,这个时间一般为1分钟、5分钟、15分钟。理想情况下,平均负载不超过CPU核心数的70%。
1.2 上下文切换
单核CPU一次只能运行一个进程或线程,超线程除外,看上去多个任务在同时运行,其实是Linux内核在不同的进程间切换,公平地分配CPU时间片,这便是上下文切换。上下文切换,需要移动跟踪进程的大量信息,开销很大。内核调度,会周期性地中断正在运行的进程,切换其它进程,引起上下文切换。如果上下文切换明显多于定时器中断,那么可能是IO请求或长时间的系统调用造成的,在这种操作不能立即完成的情况下,为了提高CPU效率,内核也会调度进程,发生上下文切换。
1.3 中断
硬件设备有事件需要内核处理时,会触发中断,即硬中断。如果有相应的已注册的中断处理程序,就会处理这个中断,否则将忽略。中断处理程序运行时的优先级很高,速度也很快。如果不需要高优先级时,会启动下半部,交给软中断处理程序。
1.4 cpu usage
CPU状态,包括idle空闲状态、执行user用户代码的用户态、执行system系统代码的内核态、执行低优先级用户代码的友好用户态、iowait状态、irq硬中断状态、softirq软中断状态。
CPU使用率即CPU各个状态占总时间的百分比,常用来作为衡量系统性能的一个指标。理想情况下,系统CPU使用率不超过70%。
1.5 时间
应用程序在运行时,消耗在系统调用即内核上的时间为系统时间,消耗在依赖库和程序代码上的时间为用户时间。
分析CPU性能问题时,往往需要细化到主要是哪个函数或哪行代码在消耗CPU时间。
2 工具
2.1 proc
通过/proc/cpuinfo文件可以查看cpu相关信息