| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 基于一次线上Rabbitmq 积压问题的排查总结和分析 -> 正文阅读 |
|
[大数据]基于一次线上Rabbitmq 积压问题的排查总结和分析 |
1,mq积压如何解决? 2,我们怎么去排查mq积压的问题? mq问题排查的核心:1,mq消息队列消费不过来,查看管道和连接数据。 2,mq消息数据积压数据消费不过来,自动ack比手动ack快。 3,程序性能不行。 4,数据库锁表,数据库io过高也会导致数据积压。 5,增加消费者连接数配置。(不推荐) 我们消息队列积压了一千四百多万的业务数据,数据积压了会一直积压,如果不处理对业务有很大的影响。 我们看我们管道和消费都是正常的,所以程序处理慢的问题就在我们写的消费程序上面了。 我们排查到问题是因为程序的问题没有修改的程序代码: ?这段代码的意思是用java程序写分析服务,虽然用的是orcal数据库,但是数据库io还是挺大的,导致了数据库锁表,频繁的添加和更新会导致数据库io过高,然后锁表导致mq消息消费不过来积压。 这条sql可以帮我们查看当前锁表的语句。
? ? 那么找到问题了就好解决了,优化代码。 第二版本代码,优化了程序锁表问题解决了。消息也不堆积了。 但是redis缓存库也有压力啦。几百万个对象存redis还是不行。 ? ? 第三版代码,平衡redis和数据库的操作,数据直接入库,通过定时任务去触发读取redis key进行更新数据,分析数据根据缓存去删除缓存和库的数据。定时更新数据库后删除redis缓存,通过字符串key判断数据是否存在。第三版代码就相对稳定了,我们问题已经解决了。 总结:基于大数据量,高并发下程序,我们一定要考虑数据库io和redis缓存的压力,并不是说所有的并发都可以通过缓存去处理,实际情况是复杂的多,既要考虑服务器性能,也要考虑数据库io和redis缓存过多的问题,还有程序本身代码的处理。通过均衡程序和缓存,数据库io的方式,并不是说读写改都不能操作数据库,有必要的时候取其二这样才能让程序稳定且高效的运行。 排查mq堆积的问题:1,管道连接,mq通讯。2,程序代码。3,数据库io。4,分布式缓存性能瓶颈。5,服务器性能等。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:58:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |