运维告诉我CPU飙升数倍,为什么我的程序上线就奔溃了
各人好,我是小六六,今朝在一线互联网公司认真年营收过百亿的付出中台项目,感激各人的支持,本日我们来看看 线上处事CPU飙升的题目 絮叨成果开拓完成仅仅是项目周期中的第一步,一个美满的项目是在运行期浮现的 本日我们就来看看笔者之前碰着的一个题目CPU飙升的题目。代码层面从成果上看没有任何题目可是投入行使后却让我头大 题目描写体系上点击数据录入成果在全局监控中会收到相干动静的关照。此时处事器CPU飙升300% 题目定位起首我们先梳理下Websocket的数据发送的简朴道理表示图。每每定位题目得清晰我们的逻辑是什么 当一个客户端启动时除了和Websocket成立毗连之外,我们还必要向Websocket处事注册当前客户端必要哪些接口的及时数据 我在代码内部是通过一个Map来存储这些接口署名信息的。然后客户注册时辰将这些接口和客户端绑定在一路 当我们监听措施坚挺到数据变换就会对绑定到相干接口的客户端发送最新数据 上面是我们的发送动静的代码。代码也很简朴。先获取全部切合发送前提的客户端 。然后通过客户端内部提供的sendMessage要领举办推送。 可是这个时辰的message 是我们的接口信息。在内部会基于客户端生涯的要领署名举办反射挪用从而获取最新数据。在推送给客户端的 在上面的代码中焦点的是WebsocketManager.messageParse 。这段是获打动静然后发送。内里获打动静是基于resultful名目理会的 发生缘故起因 上面我们简朴的梳理了下代码的逻辑。 细心说明下我们是遍历全部客户端然后在反射挪用接口数据举办返回的。现实上在动静推送时我们没须要在每个客户端内部挪用数据。我们完全可以先挪用数据然后在遍历客户端举办发送。 这也是导致CPU过高的题目。我们1W个用户同事在线的也许有5000+ 。那么我们必要5000次以上的反射着必定是吃不用的。这也是为什么本文开头说成果正常不代表营业正常。 办理方案这就是量变引起质变。在多客户的环境下我们的计划破绽就袒暴露来。这里也是笔者本身给本身挖坑。既然找到题目我们就好办理了。下面我们对代码做了一下窜改 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |