CPU利用率和CPU负载的区别是什么
提到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的比例。
查看物理CPU个数
cat /proc/cpuinfo| grep “physical id”| sort | uniq| wc -l
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep “cpu cores” | uniq
查看逻辑CPU的个数
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命令察看,假如发现当初的确是高负载低使用率。
而后,再通过命令ps -aux查看是否存在状态为D的过程,这个状态指的就是不可中断的睡眠状态的过程。处于这个状态的过程无奈终止,也无奈自行退出,只能通过复原其依赖的资源或者重启零碎来解决。以下图中没有D状态的过程。
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使用率就会降落的。往期面试题汇总:250期面试材料
CPU利用率达到100%怎么排查问题
1、通过top找到CPU占用率高的过程
2、通过top -Hp pid命令查看CPU占比靠前的线程ID
3、再把线程ID转化为16进制,printf “0x%x\n” 74317,失去0x1224d
4、通过命令jstack 72700 | grep ‘0x1224d’ -C5 --color找到有问题的代码
留神:jstack的对象是java过程的PID,而不是java线程的PID。
说几个常见的Linux命令
罕用的文件/目录命令
ls:用户查看目录下的文件,ls -a能够用来查看暗藏文件,ls -l能够用于查看文件的详细信息,包含权限、大小、所有者等信息。
touch:用于创立文件。如果文件不存在,则创立一个新的文件,如果文件已存在,则会批改文件的工夫戳。
cat:cat是英文concatenate的缩写,用于查看文件内容。应用cat查看文件的话,不论文件的内容有多少,都会一次性显示,所以他不适宜查看太大的文件。
more:more和cat有点区别,more用于分屏显示文件内容。能够用空格键向下翻页,b键向上翻页
less:和more相似,less用于分行显示
tail:可能是平时用的最多的命令了,查看日志文件根本靠它。tail -fn 100 xx.log查看最初的100行内容
罕用的权限命令
chmod:批改权限命令。个别用+号增加权限,-号删除权限,x代表执行权限,r代表读取权限,w代表写入权限,常见写法比方chmod +x 文件名增加执行权限。
还有另外一种写法,应用数字来受权,因为r=4,w=2,x=1,平时执行命令chmod 777 文件名这就是最高权限了。
第一个数字7=4+2+1代表着所有者的权限,第二个数字7代表所属组的权限,第三个数字代表其他人的权限。常见的权限数字还有644,所有者有读写权限,其他人只有只读权限,755代表其他人有只读和执行权限。
chown:用于批改文件和目录的所有者和所属组。个别用法chown user 文件名用于批改文件所有者,chown user:user 文件名批改文件所有者和组,冒号后面是所有者,前面是组。往期面试题汇总:250期面试材料
罕用的压缩命令
zip:压缩zip文件命令,比方zip test.zip 文件名能够把文件压缩成zip文件,如果压缩目录的话则需增加 -r 选项。
unzip:与zip对应,解压zip文件命令。unzip xxx.zip间接解压,还能够通过 -d 选项指定解压目录。
gzip:用于压缩带.gz后缀的文件,gzip命令不能打包目录。须要留神的是间接应用gzip 文件名这个命令会导致源文件会隐没,如果要保留源文件,能够应用gzip -c 文件名 > xx.gz,解压缩间接应用gzip -d xx.gz
tar:tar命令能够为linux的文件和目录创立档案。利用tar,能够为某一特定文件创建档案(备份文件),也能够在档案中扭转文件,或者向档案中退出新的文件。tar罕用几个选项,-x 解打包,-c 打包,-f 指定压缩包文件名,-v 显示打包文件过程,个别罕用tar -cvf xx.tar 文件名来打包,解压则应用tar -xvf xx.tar
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要辨别这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),而后再用压缩程序进行压缩(gzip等命令)。
Linux的打包和压缩是离开的操作,如果要打包并且压缩的话,依照后面的做法必须先用tar打包,而后再用gzip压缩。当然,还有更好的做法就是-z命令,打包并且压缩。
应用命令tar -zcvf xx.tar.gz 文件名来打包压缩,应用命令tar -zxvf xx.tar.gz来解压缩。