0

0

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

爱谁谁

爱谁谁

发布时间:2025-06-26 11:44:26

|

550人浏览过

|

来源于php中文网

原创

cpu利用率和cpu负载的区别是什么?

要理解CPU利用率,我们需要先了解CPU时间片的概念。

什么是CPU时间片?我们现在使用的Windows、Linux、Mac OS等都是“多任务操作系统”,它们可以“同时”运行多个程序,比如一边浏览网页一边听音乐。

然而,实际上一个CPU内核在同一时刻只能执行一个任务。那么,操作系统是如何实现“多任务”的呢?

大致的方法是让多个进程轮流使用CPU的一小段时间。由于这个“一小段时间”非常短(在Linux上为5ms到800ms之间),用户感觉不到,就好像几个程序同时在运行。

上面提到的“一小段时间”就是我们所说的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

查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo| grep "cpu cores" | uniq

查看逻辑CPU的个数

VWO
VWO

一个A/B测试工具

下载
cat /proc/cpuinfo| grep "processor"| wc -l

如果CPU负载很高,利用率却很低该怎么办?CPU负载很高,利用率却很低,说明处于等待状态的任务很多,负载越高,代表可能有很多僵死的进程。

通常这种情况是IO密集型的任务,大量任务在请求相同的IO,导致任务队列堆积。

生产环境造成CPU利用率低负载高的具体场景常见的有如下几种。

场景一:磁盘读写请求过多就会导致大量I/O等待进程在CPU上面运行需要访问磁盘文件,这个时候CPU会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候CPU会切换到其他进程或者空闲,这个任务就会转换为不可中断睡眠状态。

当这种读写请求过多就会导致不可中断睡眠状态的进程过多,从而导致负载高,CPU低的情况。

场景二:MySQL中存在没有索引的语句或存在死锁等情况我们都知道MySQL的数据是存储在硬盘中,如果需要进行SQL查询,需要先把数据从磁盘加载到内存中。

当在数据特别大的时候,如果执行的SQL语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大。

同样,可以先通过top命令观察,假设发现现在确实是高负载低使用率。

Linux 面试最高频的 5 个基本问题然后,再通过命令ps -aux查看是否存在状态为D的进程,这个状态指的就是不可中断的睡眠状态的进程。

处于这个状态的进程无法终止,也无法自行退出,只能通过恢复其依赖的资源或者重启系统来解决。

以下图中没有D状态的进程。

Linux 面试最高频的 5 个基本问题Linux上进程的五种状态

R (TASK_RUNNING):可执行状态,只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态。 S (TASK_INTERRUPTIBLE):可中断的睡眠状态,处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。 D (TASK_UNINTERRUPTIBLE):不可中断的睡眠状态,进程处于睡眠状态,但是此刻进程是不可中断的。TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的。 T (TASK_STOPPED or TASK_TRACED):暂停状态或跟踪状态。 Z (TASK_DEAD - EXIT_ZOMBIE):退出状态,进程成为僵尸进程。进程已终止,但进程描述还在,直到父进程调用wait4()系统调用后释放。 如果CPU负载很低,利用率却很高该怎么办?这表示CPU的任务并不多,但是任务执行的时间很长,大概率就是你写的代码本身有问题,通常是计算密集型任务,生成了大量耗时短的计算任务。

怎么排查?

直接使用top命令找到CPU使用率最高的进程,定位到去看看就行了。如果代码没有问题,那么过段时间CPU使用率就会下降的。

CPU利用率达到100%怎么排查问题?1、通过top找到CPU占用率高的进程

Linux 面试最高频的 5 个基本问题2、通过top -Hp pid命令查看CPU占比靠前的线程ID

Linux 面试最高频的 5 个基本问题3、再把线程ID转化为16进制,printf "0x%x\n" 74317,得到0x1224d

Linux 面试最高频的 5 个基本问题4、通过命令jstack 72700 | grep '0x1224d' -C5 --color找到有问题的代码

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

683

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

323

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

348

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1096

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

358

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

697

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

577

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

418

2024.04.29

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号