• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

常见性能问题-CPU占用高

开发技术 开发技术 5小时前 1次浏览

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占用高
喜欢 (0)