linux服务器CPU占用率800%左右...

linux服务器CPU占用率800%左右...,第1张

在Linux系统中,CPU利用率的最大值是100%。但是,当一个进程使用了多个CPU核心时,它的CPU利用率可能会显示为超过100%的数字。例如,如果一个进程使用了4个CPU核心,则它的CPU利用率可能会显示为400%。如果一个进程使用了8个CPU核心,则它的CPU利用率可能会显示为800%。

这种情况通常发生在多线程程序中,每个线程都在一个单独的CPU核心上运行。因此,如果一个进程有多个线程并且每个线程都在一个单独的CPU核心上运行,则它的CPU利用率可能会显示为超过100%的数字。

需要注意的是,这种超过100%的CPU利用率并不表示真正的CPU使用率超过了100%,而是表示该进程利用了多个CPU核心。

Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行CPU利用率。根据经验来看,用户空间进程占用CPU比例在 65-70%。一般不能超过这个比例,超过这个比例,系统性能就会降低,平均负载升高,这点将会在下面的测试中看到。

进程上下文切换。上下文切换和CPU利用率应该联系起来,如果CPU利用率低,那么上下文切换稍高点也能接受。上下文切换也是需要消耗CPU资源的,频繁的切换必将使得CPU利用率升高。

运行队列中等待运行的进程数。每个CPU核心中等待处理的进程数不应该超过3个线程/进程。如4核心的机器,那么队列的最大值应该不超过12个。

对于CPU过载问题通常使用以下两种方式即可快速定位(不能涵盖所有特殊情况,请作为其中的参考排查思路):

一、排查分析

方法一(针对JAVA应用):

第一步:使用

top命令,然后按shift+p按照CPU排序

找到占用CPU过高的进程的pid

第二步:使用

top -H -p [进程id]

找到进程中消耗资源最高的线程的id

第三步:使用

echo 'obase=16[线程id]' | bc或者printf "%x\n" [线程id]

将线程id转换为16进制(字母要小写)

bc是linux的计算器命令

第四步(此步骤可以和相对应的java开发进行一起排查):执行

jstack [进程id] |grep -A 10 [线程id的16进制]”

查看线程状态信息

二、kswapd0 进程占用 CPU 较高

*** 作系统都用分页机制来管理物理内存, *** 作系统将磁盘的一部分划出来作为虚拟内存,由于内存的速度要比磁盘快得多,所以 *** 作系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中,由于内存持续不足,这个换页动作持续进行,kswapd0 是虚拟内存管理中负责换页的,当服务器内存不足的时候 kswapd0 会执行换页 *** 作,这个换页 *** 作是十分消耗主机 CPU 资源的。如果通过 top 发现该进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页 *** 作,可以将问题转向内存不足的原因来排查。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9031294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存