cpu利用率(cpu利用率怎么算)

专注于Java领域优质技术号,欢迎关注作者:王洪涛作者简介JD.COM商场,建筑师R&D部。在R&D和高性能、高可用性的大型分布式系统架构方面有丰富的经验。20

专注于Java领域优质技术号,欢迎关注

cpu利用率(cpu利用率怎么算)插图

作者:王洪涛

作者简介JD.COM商场,建筑师R&D部。在R&D和高性能、高可用性的大型分布式系统架构方面有丰富的经验。2015年加入JD.COM,目前负责服务市场的系统研发。

怀疑一个 while 死循环,会不会引起 CPU 使用率飚升?频繁 Young GC 会不会引起 CPU 使用率飚升?线程数很高的应用,CPU 使用率一定高么?CPU 使用率高的应用,线程数一定高么?BLOCKED 状态的线程会不会引起 CPU 使用率飚升?分时操作系统 CPU 是耗费 us ? 还是耗费 sy ?想

1.如何计算CPU利用率?

CPU% = 1 -空闲时间/系统时间* 100

idleTime:CPU处于空闲状态的时间sysTime:CPU处于用户态和内核台的时间总和

2.CPU使用率和什么有什么关系?

人们常说计算密集型程序会消耗CPU资源。

JAVA应用中哪些操作是CPU密集型的?

列出日常程序中常见的消耗CPU的操作:

频繁GC,访问量高时,有可能造成频繁的GC、甚至FGC。当调用量大时,内存分配过快,就会造成GC线程不停的执行,导致CPU飙高序列化与反序列化,后文中举了一个真实的案例,程序执行xml解析的时,调用量增大的情况下,导致了CPU被打满加密、解密正则表达式校验,曾经线上发生一次血案,正则校验将CPU打满。大概原因是:Java 正则表达式使用的引擎实现是 NFA 自动机,这种引擎在进行字符匹配会发生回溯(backtracking)线程上下文切换、当启动了很多线程,而这些线程都处于不断的阻塞状态(锁等待、IO等待等)和执行状态的变化过程中。当锁竞争激烈时,很容易出现这种情况某些线程在做无阻塞的运算,简单的例子while(true)中不停的做运算,没有任何阻塞。写程序时,如果需要做很久的计算,可以适当将程序sleep下

3.CPU和进程、线程有关系吗?

目前分时操作系统对进程调度是以循环方式分配时间片的,所以如果进程在等待或者阻塞,也不会造成CPU资源占用。线程被称为轻进程,它们共享进程资源。关于线程的调度,CPU也是对线程进行分时调度。而在Java中,JVM负责线程的调用,线程调度一般有两种模式:分时调度和抢占式调度。

消除疑虑

1.while无限循环会导致CPU利用率飙升吗?

会的。

别的不说,无限循环会调用CPU寄存器计数,这个操作会占用CPU。其次,如果线程总是无限循环,CPU调用会切换线程吗?

无限循环不会放弃CPU,除非操作系统时间片过期,但是无限循环会一直向系统申请时间片,直到系统没有空空闲时间做其他事情。

这个问题在stackoverflow中也被问过:为什么联合的无限循环会增加CPU的使用?

地址: overflow . com/questions//why-a infinite-loop-of-the-destined-kind-address-the-CPU-use

2.频繁的Young GC会导致CPU利用率飙升吗?

会的。

Young GC本身就是JVM的垃圾收集操作,会计算内存,调用寄存器。频繁的Young GC肯定会占用CPU。

之前有个案例,for循环从数据库中查询数据集,第二次封装新的数据集。此时,如果卷较大时内存中没有足够的空存储,那么JVM会对不再使用的数据进行GC回收,所以当卷较大时,会收到CPU使用率报警。

3.对于线程数量多的应用,CPU利用率一定要高吗?

号码

通过jstack检查系统线程状态。线程很多,但处于可运行和正在运行状态的线程不多。这个时候CPU利用率可能不高。

之前有个案子。看1000+的系统线程数,jstack分析有900多个线程被阻塞等待,这样的线程不会占用CPU。

如果线程数量多,其实大部分原因是死锁,大量线程被阻塞等待。

4.对于CPU利用率高的应用程序来说,线程数量多吗?

号码

同上,CPU利用率高的关键因素是计算密集型操作。如果一个线程的计算量很大,也会造成很高的CPU利用率,这也是一个大数据脚本任务需要大规模集群计算才能运行的原因。

5.处于阻塞状态的线程会导致CPU利用率飙升吗?

不一定。

CPU利用率飙升更多的是上下文切换或者太多线程处于可运行状态造成的。阻塞状态不一定导致CPU上升。

6.分时操作系统的CPU us或sy高是什么意思?

使用top命令,您可以观察CPU的us,sy值,如下例所示:

用户空占用CPU的百分比。简单来说,美国高是节目造成的。通过分析线程堆栈,可以很容易地定位问题线程。sy内核空占用的CPU百分比。sy高的时候,如果是程序问题导致的,基本上是线程上下文切换导致的。经验

如何定位平时CPU利用率高的原因?网上有教程和方法。下面是分析过程的简要描述。

首先,发现一个应用的CPU利用率高。第一,要看线程数,JVM,系统负载等参数一起作证。第二,打印jstack,通过工具分析线程情况,推荐使用在线线程分析工具fastThread。

以下是网上发生的真实案例。我简单介绍一下:

一天晚上突然收到短信报警,CPU利用率100%。立即转储机器jstack,并通过检查日志,如下所示:

进一步检查具体日志:

通过该日志,可以定位特定CPU已满的方法。收到MQ后,MQ的消息体是xml,反序列化时导致CPU飙升。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/120911.html

发表回复

登录后才能评论