Linux面试最高频的5个基本问题


提到CPU利用率 , 就必须理解时间片 。 什么是CPU时间片?我们现在所使用的Windows、linux、Mac OS都是“多任务操作系统” , 就是说他们可以“同时”运行多个程序 , 比如一边打开Chrome浏览器浏览网页还能一边听音乐 。
但是 , 实际上一个CPU内核在同一时刻只能干一件事 , 那操作系统是如何实现“多任务”的呢?大概的方法是让多个进程轮流使用CPU一小段时间 , 由于这个“一小段时间”很短(在linux上为5ms-800ms之间) , 用户感觉不到 , 就好像是几个程序同时在运行了 。 上面提到的“一小段时间”就是我们所说的CPU时间片 , CPU的现代分时多任务操作系统对CPU都是分时间片使用的 。
CPU使用率 , 就是程序对CPU时间片的占用情况 , 即CPU使用率 = CPU时间片被程序使用的时间 / 总时间 。 比如A进程占用10ms , 然后B进程占用30ms , 然后空闲60ms , 再又是A进程占10ms , B进程占30ms , 空闲60ms , 如果在一段时间内都是如此 , 那么这段时间内的CPU占用率为40% 。 CPU利用率显示的是程序在运行期间实时占用的CPU百分比 。
大多数操作系统的CPU占用率分为用户态CPU使用率和系统态CPU使用率 。 用户态CPU使用率是指执行应用程序代码的时间占总CPU时间的百分比 。 相比而言 , 系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比 。 系统态的CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互 。
而CPU负载显示的是一段时间内正在使用和等待使用CPU的平均任务数 。
简单理解 , 一个是CPU的实时使用情况 , 一个是CPU的当前以及未来一段时间的使用情况 。 举例来说:如果我有一个程序它需要一直使用CPU的运算功能 , 那么此时CPU的使用率可能达到100% , 但是CPU的工作负载则是趋近于“1” , 因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100% , 但是工作负载则变成2了 。 所以也就是说 , CPU的工作负载越大 , 代表CPU必须要在不同的工作之间进行频繁的工作切换 。 无论CPU的利用率是高是低 , 跟后面有多少任务在排队(CPU负载)没有必然关系 。
如果单核CPU的话 , 负载达到1就代表CPU已经达到满负荷的状态了 , 超过1 , 后面的进行就需要排队等待处理了 。 如果是是多核多CPU , 假设现在服务器是2个CPU , 每个CPU有2个核 , 那么总负载不超过4都没什么问题 。
可以通过uptime、w命令查看CPU平均负载 , 使用top命令还能看到CPU负载总体使用率以及各个进程占用CPU的比例 。
Linux面试最高频的5个基本问题
本文插图
查看物理CPU个数
cat /proc/cpuinfo| grep “physical id”| sort | uniq| wc -l