在项目中,很可能会遇到CPU使用率过多。在跑测试过程中,很多人如果发现了CPU不够用怎么办?现分享出自己的性能分析思路。
首先还是多唠叨几句CPU相关的话题吧。CPU本身是熟悉计算机系统的硬件之一,从字面意思上应该也能想到其重要程度。可以简单地把CPU干活理解为“处理数据”,那么数据从哪里来?还是简单起见(这里不是很严谨,但是为了理解上的方便),可以理解为从磁盘和内存。比如更改“数据库某行上的某个字段上值,首先把磁盘上存储内容读到内存中,处理完之后,更新过的数据存放在内存中,最后再写回到磁盘中。这其中涉及到CPU,内存,磁盘。其实从全局的角度看,还包含操作系统(文件系统,磁盘IO等),网络IO等。
所以,1> 从以上你可以发现和CPU问题相关的介质或组件其实有很多,但是遇到CPU的问题,我们还是优先想到,内存是不是也不够了。这种想法是对的。因为从上一段落的分析可以看到:数据存放到内存和数据存放到磁盘,对效率的影响是蛮大的。即使你用的是SSD,这种速度上的差别也是差多少个数量级。所以有可能是内存也已经用完了,导致SQL执行效率不高。可以考虑增大内存分配,再进行测试验证。
2> CPU在等待磁盘IO,或者磁盘IO比较忙,怎么去判断磁盘IO是不是繁忙呢?可以通过如下命令,直接获取,看最磁盘适用率,如果接近100%,证明是比较繁忙,可以进一步深入问题,能不能使用数据库cache,或者将这部分逻辑的后台迁移到memory store类型的存储介质中,如redis等。避免此部分的业务逻辑造成瓶颈。
iostat -d -x -k 1
复制
3> 线程资源争抢,需要分析线程相关log。如果发现现场死锁,不管是锁在对象资源还是数据库资源,都需要优先修复。如果出现共享资源争抢,那么这部分逻辑的后台,最好不要放在关系型数据库中。
暂时能想到这么多,如果有更多的,后续再补充。谢谢大家!
文章转载自TimTest,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。