`
shixin42
  • 浏览: 55257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

今天发现rabbitMQ消息堆积

阅读更多
发现有三十多万的消息堆积在10的queue里没有被消费


记录一下查看问题的步骤:
1 jps
找出程序的PID

2 jstack ${PID}
查看线程dump,发现rabbitMQ的consumer worker线程block住了:

"Thread-33" prio=10 tid=0x00002aaac8013000 nid=0x3264 waiting for monitor entry [0x00000000437e4000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3525)
        - waiting to lock <0x000000072039ce18> (a java.lang.Object)
        at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3505)
        at com.xiaomi.miliao.mt.fulltextindex.UserIndexUpdater.updatePlUserIndex(UserIndexUpdater.java:229)
        - locked <0x0000000711ab59c8> (a java.lang.Object)
        at com.xiaomi.miliao.mt.fulltextindex.SearcherDelegate.updatePlUserIndex(SearcherDelegate.java:522)
        at com.xiaomi.miliao.mt.fulltextindex.MessageQueueDelegate$PlUserIndexMessageHandler.handleMessage(MessageQueueDelegate.java:342)
        at com.xiaomi.miliao.rabbitmq.ConsumerWorker.run(ConsumerWorker.java:107)
        at java.lang.Thread.run(Thread.java:662)

这个线程的状态是wating for monitor entry,但是它在等待这个锁(0x000000072039ce18)已经被下面的这个线程占有了,而且下面的这个线程一直在run,没有返回。根据它的栈信息,查看java.io.FileDescriptor.sync方法,怀疑是系统IO很繁忙,一直没有返回。

"Thread-24" prio=10 tid=0x00002aaac8007000 nid=0x3257 runnable [0x00000000431d8000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileDescriptor.sync(Native Method)
        at org.apache.lucene.store.FSDirectory.sync(FSDirectory.java:321)
        at org.apache.lucene.index.IndexWriter.startCommit(IndexWriter.java:4801)
        at org.apache.lucene.index.IndexWriter.prepareCommit(IndexWriter.java:3461)
        at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3534)
        - locked <0x000000072039ce18> (a java.lang.Object)
        at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3505)
        at com.xiaomi.miliao.mt.fulltextindex.UserIndexUpdater.updatePlUserIndex(UserIndexUpdater.java:229)
        - locked <0x0000000711d6b558> (a java.lang.Object)
        at com.xiaomi.miliao.mt.fulltextindex.SearcherDelegate.updatePlUserIndex(SearcherDelegate.java:522)
        at com.xiaomi.miliao.mt.fulltextindex.MessageQueueDelegate$PlUserIndexMessageHandler.handleMessage(MessageQueueDelegate.java:342)
        at com.xiaomi.miliao.rabbitmq.ConsumerWorker.run(ConsumerWorker.java:107)
        at java.lang.Thread.run(Thread.java:662)

3 ssh到指定服务器,查看cpu负载
top -d 5 五秒刷新一次,然后按1,查看所有的cpu的情况,没有发现异常,但是发现我的服务确实很占cpu啊,给力!lucene确实需要优化,赶紧切换到sensei吧

[root@MT1-10 logs]# top -d 5
top - 20:13:51 up 439 days, 16:15,  7 users,  load average: 4.56, 4.82, 4.84
Tasks: 244 total,   1 running, 243 sleeping,   0 stopped,   0 zombie
Cpu0  : 17.6%us,  1.6%sy,  0.0%ni, 73.6%id,  7.2%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  6.6%us,  1.4%sy,  0.0%ni,  6.0%id, 85.8%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu2  :  5.6%us,  0.8%sy,  0.0%ni, 84.1%id,  9.6%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  4.4%us,  0.4%sy,  0.0%ni, 95.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  3.0%us,  0.6%sy,  0.0%ni, 93.8%id,  2.6%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  2.2%us,  0.6%sy,  0.0%ni, 94.4%id,  2.8%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  2.2%us,  0.2%sy,  0.0%ni, 95.6%id,  2.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  : 15.0%us,  2.4%sy,  0.0%ni, 70.1%id, 12.2%wa,  0.0%hi,  0.4%si,  0.0%st
Cpu8  :  5.4%us,  0.6%sy,  0.0%ni, 91.6%id,  2.2%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu9  :  5.2%us,  1.2%sy,  0.0%ni, 66.9%id, 26.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu10 :  2.6%us,  0.6%sy,  0.0%ni, 92.4%id,  4.4%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu11 :  6.2%us,  0.8%sy,  0.0%ni, 93.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu12 :  2.4%us,  0.4%sy,  0.0%ni, 95.4%id,  1.8%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu13 : 11.8%us,  1.2%sy,  0.0%ni, 84.7%id,  2.4%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu14 :  2.2%us,  0.2%sy,  0.0%ni, 97.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu15 : 35.8%us,  5.2%sy,  0.0%ni, 41.8%id, 12.8%wa,  0.2%hi,  4.2%si,  0.0%st
Mem:  32956180k total, 32849076k used,   107104k free,   547628k buffers
Swap:  6144820k total,      228k used,  6144592k free, 18353516k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                            
12681 root      18   0 5168m 2.4g  13m S 129.3  7.7   1675:27 java   
    

4 使用iostat -d -x 1 100,查看系统io的使用情况(-d 是查看disk, -c是查看cpu), -x是查看更多信息,1是1秒刷新一次,100是查看一百次

[root@MT1-10 logs]# iostat -d -x 1 1
Linux 2.6.18-194.el5 (MT1-10) 10/09/2012
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
cciss/c0d0        0.00   776.00  3.00 259.00    24.00 11360.00    43.45    51.73  352.21   3.82 100.10
cciss/c0d0p1
               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
cciss/c0d0p2
               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
cciss/c0d0p3
               0.00    23.00  0.00  3.00     0.00   208.00    69.33     0.18   61.00  61.00  18.30
cciss/c0d0p4
               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
cciss/c0d0p5
               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
cciss/c0d0p6
               0.00   753.00  3.00 256.00    24.00 11152.00    43.15    51.55  355.59   3.86 100.10
具体名咯解析可查看
http://wenku.baidu.com/view/5991f2781711cc7931b7168c.html

发现cciss/c0d0p6的%util达到了100%,太繁忙了。
平均IO请求的队列长度avgqu-sz是51.55
平均使用的扇区数量是43.15
平均每个IO的等待时间的355.59毫秒
说明这快磁盘已经出现性能瓶颈了!

使用iopp可查看每个进程的IO情况!


  • 大小: 54.6 KB
分享到:
评论

相关推荐

    Rabbitmq堆积消息后生产速率降低的问题分析及应对措施1

    标题中的“Rabbitmq堆积消息后生产速率降低的问题分析及应对措施1”涉及到RabbitMQ在消息堆积情况下的工作原理和解决策略。RabbitMQ是一个流行的开源消息代理,用于实现AMQP(Advanced Message Queuing Protocol)...

    shell脚本监控rabbitmq异常发送邮件通知.rar

    RabbitMQ是一个广泛使用的开源消息代理,它基于AMQP(Advanced Message Queuing Protocol)协议,用于处理应用程序之间的异步通信。而Shell脚本则是一种强大的Linux/Unix工具,可以执行各种任务,包括系统监控、自动...

    JAVA获取rabbitmq消息总数过程详解

    在Java中,获取RabbitMQ消息总数的过程涉及与RabbitMQ服务器建立连接、创建通道、声明队列以及查询队列状态。以下是一个详细的步骤解析: 1. **建立连接**: 首先,需要通过`ConnectionFactory`类来创建一个连接工厂...

    尚硅谷_消息中间件RabbitMQ_课件.docx

    - 支持大量消息堆积而不影响性能。 - **缺点**: - 目前支持的客户端语言较少。 - 社区活跃度相对较低。 **2.4 RabbitMQ** - **优点**: - 基于Erlang语言实现,具备良好的并发性能。 - 支持多种编程语言,...

    RabbitMQ消息中间件面试专题.zip

    - **TTL和死信队列**:设置消息存活时间,处理未消费消息,防止消息堆积。 6. **RabbitMQ安全** - **认证(Authentication)**:通过用户名和密码验证用户。 - **授权(Authorization)**:控制用户对虚拟主机、...

    MQ消息堆积终极解决方案【RabbitMQ】.docx

    ### MQ消息堆积终极解决方案【RabbitMQ】 #### 概述 在分布式系统中,消息队列(MQ)作为异步通信的重要组件,在提高系统吞吐量、解耦合度方面发挥着关键作用。然而,随着业务量的增长及复杂性的增加,消息堆积...

    高弹性低成本的云消息队列RabbitMQ版DEMO

    云消息队列 RabbitMQ 版兼容开源 RabbitMQ 客户端,解决开源各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。 了解云消息队列RabbitMQ版和开源版本的区别和优势...

    RabbitMQ.pdf

    - **Kafka**:高性能的发布/订阅消息系统,支持高吞吐、低延迟和大数据量堆积。 - **RocketMQ**:原为Metaq,阿里巴巴开源,提供严格的消息顺序、丰富的拉取模式和大规模扩展能力。 - **RabbitMQ**:基于AMQP协议,...

    淘宝RabbitMQ系统的实验测试资料.zip

    - "RabbitMQ堆积消息后生产速率降低的问题分析及应对措施.docx":当消息堆积时,生产者可能会被阻塞,降低发送速率。文档分析了这个问题的原因,并提出了相应的应对策略,以保证系统的稳定运行。 6. **RabbitMQ的...

    RabbitMQ服务开发指南(修订版-1)

    5. **合理设置消息过期时间**:避免queue堆积过多消息,造成资源浪费。 以上是对RabbitMQ服务开发的基本介绍,包括其核心概念、工作流程、安装配置、客户端使用以及高级特性和最佳实践。深入理解并熟练运用这些知识...

    158-最简单的 RabbitMQ 监控方法1

    如果持续增长,表示有消息堆积,可能存在队列积压的问题。此时,可以通过查看Overview后面的标签,如Connection、Channel、Exchange和Queue,进一步定位问题源头并解决。 文章中给出了一个实际案例,描述了...

    消息队列(MQ)之RabbitMQ

    - **RocketMQ**:源于阿里巴巴,优化了Kafka的设计,提供了更高的消息零丢失保证和更完善的MQ功能,适合大规模消息堆积场景。然而,RocketMQ的客户端支持语言有限,社区活跃度相对较低。 - **RabbitMQ**:作为Java...

    RabbitMQ高可用集群部署1

    【RabbitMQ高可用集群部署】是实际生产环境中常见的解决方案,因为单一实例的RabbitMQ在面对高并发、高吞吐量以及消息堆积时可能存在局限性。为了提高系统的可靠性和可扩展性,采用集群模式是必要的。RabbitMQ基于...

    rabbitmq 延迟插件3.7.x

    - 为避免消息堆积,尽量减少不必要的延迟消息。 - 设计合理的消息结构,便于过滤和查找特定的延迟消息。 - 定期评估和调整延迟策略,以适应业务变化。 总结,RabbitMQ的延迟插件3.7.x版本为分布式系统提供了强大...

    08.1、消息中间件--RabbitMQ(20题)1

    - 停止现有消费者,防止新消息继续堆积。 - 创建一个新的主题,设置partition数量为原来的10倍,并建立相应的临时队列,数量可能是原来的10倍或20倍。 - 编写一个临时消费者程序,部署后用于快速消费积压数据,...

    Java中间件-RabbitMQ教程

    课程目的 1. 了解消息中间件背景...5、如何发现出现了大量消息的堆积?采取了哪些应急措施?问题产生的根源是什么?如何避免 消息中间件概述: 分布式系统中如何进行远程通信 为什么要使用消息中间件?市场上有哪些

    消息中间件kafka与activemq、rabbitmq、zeromq、rocketmq的比较

    - **消息堆积能力**: 可以有效处理亿级别的消息堆积。 - **高效订阅**: 支持多种消息订阅模式。 - **适用场景**: - 分布式系统消息传递 - 企业级应用集成 #### 总结 - **性能考量**: 当消息性能要求较高时,...

    rabbitmq面试题.pdf

    解释RabbitMQ的消息堆积问题及解决方案。** - **问题原因:** 消费者处理能力不足。 - **解决方案:** 增加消费者数量、优化处理逻辑。 **47. 在RabbitMQ中,如何诊断和解决网络问题?** - 利用网络监控工具追踪...

    高级Java人才培训专家-RabbitMQ-高级篇

    根据给定的信息,本文将详细解析“高级Java人才培训专家-RabbitMQ-高级篇”中的核心知识点,并深入探讨其中提及的几个关键问题:延迟消息、消息堆积、消息可靠性以及高可用性。 ### 一、延迟消息问题 在某些场景下...

    RabbitMQ开发演示文档

    此外,我们还学习了如何发现出现了大量消息的堆积,采取了哪些应急措施?问题产生的根源是什么?如何避免?并讨论了项目中为什么要使用消息中间件?项目中为什么使用RocketMQ而不是RabbitMQ?系统TPS有多少?引入...

Global site tag (gtag.js) - Google Analytics