centos7 内存使用率计算_关于CPU使用率飙升,我们需要了解什么?

本文讨论了CPU使用率升高的各种原因,包括死循环、频繁Young GC、线程数过高、BLOCKED状态线程等。并举例说明了如何定位CPU飙升的线程,分析了分时操作系统中CPU us和sy的含义。通过实例,揭示了频繁GC、序列化、正则表达式、线程上下文切换等问题可能导致CPU使用率升高,并提供了相应的解决方案,如优化正则表达式、定期清理内存、升级库版本等。
摘要由CSDN通过智能技术生成
1、CPU 使用率怎么计算?

CPU% = (1 - idleTime / sysTime) * 100

  • idleTime:CPU处于空闲状态的时间

  • sysTime:CPU处于用户态和内核台的时间总和

2、CPU 使用率跟啥有关系?

常听说计算密集型的程序是比较耗 CPU 使用率的。

3、CPU 与进程、线程有关系么?

现在分时操作系统是通过循轮方式分配时间片进行进程调度的,如果进程在等待或阻塞,不会造成 CPU 资源使用。线程称为轻进程,共享进程资源,关于线程的调度,CPU 对于线程也是分时调度。而在 Java 中,线程的调用由 JVM 负责,线程的调度一般有两种模式,分时调度和抢占式调度。

4、一个 while 死循环,会不会引起 CPU 使用率飚升?

会的。

先不说别的,死循环会调用 CPU 寄存器进行计数,这个操作就会占用 CPU。其次,如果线程一直处于死循环状态,CPU 调用会进行线程切换么?

死循环不会让出 CPU,除非操作系统时间片到期,但死循环会不断向系统申请时间片,直到系统没有空闲时间做别的事情。

这个问题在 stackoverflow 也有人提问:why does an infinite loop of the unintended kind increase the CPU use?

地址:https://stackoverflow.com/questions/2846165/why-does-an-infinite-loop-of-the-unintended-kind-increase-the-cpu-use

5、频繁 Young GC 会不会引起 CPU 使用率飚升?

会的。

Young GC 本身是 JVM 进行垃圾回收的操作,会计算内存和调用寄存器,频繁 Young GC 一定是会占用 CPU。

之前有个一个案例,for 循环从数据库查询数据集合,二次封装新的数据集合,这时如果量比较大时,内存没有足够的空间存储,那么 JVM 就会 GC 回收那些不再使用的数据,因此量大的时候,就会收到 CPU 使用率报警。

6、线程数很高的应用,CPU 使用率一定高么?

不会。

通过 jstack 查看系统线程状态,查看整个线程数很多,但 Runable 和 Running 状态的线程不多,这时 CPU 使用率不一定会高。

之前有过一个案例,查看系统线程数 1000+,jstack 分析 900多个线程是 BLOCKED 和 WAITING 状态的,这种线程是不会占用 CPU 的。

如果线程数很高,其实大多数原因是死锁,大量线程处于 BLOCKED 和 WAITING 状态。

7、CPU 使用率高的应用,线程数一定高么?

不会。

同上,CPU 使用率高的关键因素还是计算密集型操作,一个线程如果有大量计算,也会造成 CPU 使用率高,也是现在为什么一个大数据脚本任务,要大规模集群共同运算才能运行的原因。

8、BLOCKED 状态的线程会不会引起 CPU 使用率飚升?

不一定。

CPU使用率的飙升,更多是因为上下文的切换或者runnable状态线程过多导致。Blocked状态,未必会引起CPU上升。

9、分时操作系统 CPU us高或者sy高是什么意思?

通过top命令,可以观察到CPU的us,sy值,示例如下:

e7ebfccbb06bf1bd11d69c56458ec394.png

  • us 用户空间占用CPU百分比,简单来说,us高是因为程序导致的,通过分析线程堆栈,可以很容易的定位到问题线程。

  • sy 内核空间占用CPU百分比,sy高的时候,如果是程序问题导致,基本是因为线程上下文切换造成的。

CPU飙升线程定位示例:

public class cpuTest {
    public static void main(String args[]){
    for(int i=0;i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值