• CPU占用率高的原因有哪些?
  • 发布于 2个月前
  • 453 热度
    0 评论
最近小同事压测了一个接口,50并发,连续跑5分钟,CPU占用率99%居高不下。看了下服务器配置,着实太低,服务器CPU双核,可用内存不足800M。单个接口连续请求测试响应时间大约在100ms左右,单核满打满算也就1s完成10个请求,双核也就20个请求,50个并发,CPU当然要忙的不可开交了。

先来看下CPU占用率计算方式,在任务管理器中的一个刷新周期内,CPU忙碌占用的时间比就是CPU的占用率,CPU占用率高直接原因就是CPU一直在忙碌。比如在linux下,我们可以通过top命令,按1查看CPU忙碌的情况,可以看到CPU有几核,每个核的使用情况。

其中us就是用户进程的占用情况,sy为系统占用情况,id为空闲情况。

再来看下TPS(trans per sec),TPS是衡量系统处理业务请求能力的指标。当TPS提高时,更多的请求需要更多的资源,必然会增加CPU的占用率。当然,CPU占用率越高并不代表性能就越好,可能是系统存在资源浪费,执行效率低下等。

回到最初的问题,接口要求达到的TPS是50,但接口平均响应时间是100ms。首先性能测试要有与之匹配的测试环境,于是申请了一台8核16g的服务器资源,将jvm初始内存和最大内存调整到2048M,新生代设置为1024m,再次进行压测。单个接口的响应时间从原来的100ms下降到了40ms左右,TPS轻松超过50,CPU的占用率约为30%。

合理推算,一个接口的响应时间40ms,单核1s大约能处理25个请求,50个并发请求双核1s就搞定了,TPS轻松能达到50,CPU只需要双核在忙碌,其余6核基本都在空闲状态,整体占用率大约30%。

CPU占用高,先要搞清楚占用率如何计算,评估接口需要达到多少TPS,然后再结合实际的服务器资源参数进行跟踪优化。很多时候都不需要程序猿去过度优化代码就能达到相应的TPS,比如常见基操:合理设置jvm内存,合理利用缓存,合理创建索引,合理异步优化等等。
用户评论