线上服务CPU飙升的一次经历
系统上点击数据录入功能在全局监控中会受到相关消息的通知。此时服务器CPU飙升300%
Websocket
的数据发送的简单原理示意图。往往定位问题得清楚我们的逻辑是什么Websocket
建立连接之外,我们还需要向Websocket
服务注册当前客户端需要哪些接口的实时数据websocket
客户端发送订阅的最新变动接口时就会出现CPU飙升。持续时间还很长,稍等一会就会降下来sendMessage
方法进行推送。message
是我们的接口信息。在内部会基于客户端保存的方法签名进行反射调用从而获取最新数据。在推送给客户端的WebsocketManager.messageParse
。这段是获取消息然后发送。里面获取消息是基于resultful格式解析的RequestMappingMessageParseHandlerImpl
这个协议。RequestMappingMessageParseHandlerImpl
是核心我将数据缓存起来。因为在同一批次推送时本来也应该保证数据一致性。而且我们系统对数据实时性也是可以接受一定时间延迟的。我在这里又加上缓存这样就解决了我们循环的问题
经过测试本次改动在CPU上大概优化了100倍。
作者: zxhtom
有时候一个小小的问题就会引起很大的波动现象,那么处理起来也是非常的痛楚,只有找到合适的方法,这次笔者自己给自己挖坑,在这里做了一下记录。特别是在高并发到的时候,小问题会带来更大的麻烦。
程序员编程书籍:https://github.com/codeGoogler/ProgramBooks
关于如何学习Java,一方面需要不断的去学习,把基础知识学扎实,另一方面也要认识到java的学习不能仅仅靠理论,更多的是靠实操,所以要多练习多做项目,在实践中学习才是最好的学习方法。很多人刚开始不知道怎么去学习,这里我将一些重要的技术文章整理到了github上开源项目上,希望能给大家带来一些帮助,项目是:JavaCodeHub
另外,还整理了一些针对于程序员的编程书籍项目,都放到了github上面,项目为:ProgramBooks 需要的话可以自取。地址:https://github.com/codeGoogler/ProgramBooks
如果github访问太慢?我同时也把去放到了码云上面ProgramBooks