C/C++教程

常见性能问题-CPU占用高

本文主要是介绍常见性能问题-CPU占用高,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

CPU占用率高可能是什么原因?

1、先分析系统类型,一般计算密集型系统就会比IO密集型系统cpu占用率高,因为计算密集型系统工作重心在计算和逻辑判断,例如大数据,他们的cup达到满负荷可能都算正常;我们接触的大部分应用都是IO密集型系统,典型应用就是数据库,再例如天猫,百度,京东,他们大部分时间在磁盘进行读和写,cup等待磁盘返回数据的过程中不分配时间片,所以CPU使用率不是特别高; 2、请求压力过大,负载高,jvm堆就要不断进行垃圾回收,young gc 和 full gc都是占用CPU内存的,所以CPU占用率越来越高,几乎100%; 3、看是usr占用cpu高还是system占用cpu高,系统占用cpu高多数是调用系统内核导致的,比如写log,如果它是由程序引起的,那么它基本上是由于线程上下文切换; 4、死循环,无限循环将调用CPU寄存器进行计数,此操作将占用CPU资源。除非操作系统时间片到期,否则无限循环不会放弃占用的CPU资源,并且无限循环将继续向系统请求时间片,直到系统没有空闲时间来执行任何其他操作。 5、多线程与cpu的关系 具有大量线程的应用程序的CPU使用率是否较高?不是。 如果通过jstack检查系统线程状态时线程总数很大,但处于Runnable和Running状态的线程数不多,则CPU使用率不一定很高。 于CPU占用率高的应用程序,线程数是否较大?不是。 高CPU使用率的关键因素是计算密集型操作。如果一个线程中有大量计算,则CPU使用率也可能很高。这也是数据脚本任务需要在大规模集群上运行的原因。 处于BLOCKED状态的线程是否会导致CPU占用率飙升?不会。 CPU使用率的飙升更多是由于上下文切换或过多的可运行状态线程。处于阻塞状态的线程不一定会导致CPU使用率上升。

这篇关于常见性能问题-CPU占用高的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!