最近听说有一道面试题,是关于应用系统出现高CPU的原因,面试者说当时回答的不太好,他只是回答应该是应用出现了死循环,面试官继续追问还有其它什么原因造成高CPU的?面试者一时想不出来,所以就回复暂时想不到其它原因了。所以针对这个问题,回答的应该是挺糟糕的吧。幸好面试官继续追问出现如何排查高CPU,面试者还能比较好的回答如何排查和解决,最后根据自身经验讲出来,总体上还算可以。那么针对这个问题:应用高CPU的原因有哪些呢?
这个原因是最常见的,也是初学者或经验较少的开发者会遇到比较多的原因。我们比较清楚的知道HashMap在多线程环境下出现线程不安全问题,可能会造成死循环。还有我以前在工作中也有遇到,就是使用定时任务分页拉取数据进行处理的时候,如果在条件查询上没有明确定义好可能会造成一直查询数据,一直没有达到终止条件,就会一直循环拉取数据,一直处理,可能就造成CPU飙高,最后不得不修复bug后再重启应用。
序列化的方式目前有很多种,包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Protobuff序列化等等。序列化也是一种消耗CPU比较高的方式。也有可能一些序列化方式会出现bug造成的高CPU。
在加解密时,会消耗较多的CPU进行处理计算。
正则表达式在使用的时候也要特别注意,有些情况是会出现高CPU。要注意贪婪模式和回溯问题。
如果应用是计算密集型应用,需要消耗很多CPU进行计算,这时也会出现CPU高的情况。
在流量比较大的情况,比如秒杀系统,瞬时巨大的流量冲击我们的系统,这个时候也会造成系统的总体负载很高,也是高CPU的罪魁祸首之一。
上面所罗列的6种高CPU的情况,也算是比较常见的。如果出现之后我们就要排查原因,并且解决它。
如果你在面试的时候遇到,如果能说出3~4种,基本上算可以了,但是最好的方式要结合自身所遇到的场景,并且描述情况,然后再把自己如何解决的过程都告诉面试官,也可以看出你经验比较丰富,这样面试就可以事半功倍了。
你还遇过哪种造成CPU飙高的原因呢?
推荐阅读
-关注搬运工来架构,与优秀的你一同进步-
本文仅供学习!所有权归属原作者。侵删!文章来源: 搬运工来架构
文章评论