activeMQ 消息队列的控制

z6165039 2014-09-03 12:01:25
利用java visualVm检测的结果:



"ActiveMQ Data File Writer" - Thread t@7134
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
- waiting on <24d32e7b> (a org.apache.activemq.kaha.impl.async.DataFileAppender$1)
at java.lang.Object.wait(Object.java:485)
at org.apache.activemq.kaha.impl.async.NIODataFileAppender.processQueue(NIODataFileAppender.java:79)
at org.apache.activemq.kaha.impl.async.DataFileAppender$2.run(DataFileAppender.java:227)

Locked ownable synchronizers:
- None

"ActiveMQ Scheduler" - Thread t@7135
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait(Native Method)
- waiting on <50385eba> (a java.util.TaskQueue)
at java.util.TimerThread.mainLoop(Timer.java:509)
at java.util.TimerThread.run(Timer.java:462)

Locked ownable synchronizers:
- None

"ActiveMQ Transport Server Thread Handler: tcp://127.0.0.1:61618" - Thread t@7155
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <26751317> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424)
at org.apache.activemq.transport.tcp.TcpTransportServer$1.run(TcpTransportServer.java:339)
at java.lang.Thread.run(Thread.java:662)

Locked ownable synchronizers:
- None

"DefaultQuartzScheduler_Worker-5" - Thread t@1531
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait(Native Method)
- waiting on <7ffacd00> (a org.quartz.simpl.SimpleThreadPool$WorkerThread)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:528)

Locked ownable synchronizers:
- None

"ExpiringMapExpirer-1" - Thread t@2751
java.lang.Thread.State: TIMED_WAITING
at java.lang.Thread.sleep(Native Method)
at org.apache.mina.util.ExpiringMap$Expirer.run(ExpiringMap.java:302)
at java.lang.Thread.run(Thread.java:662)

Locked ownable synchronizers:
- None

"HouseKeeper" - Thread t@9210
java.lang.Thread.State: TIMED_WAITING
at java.lang.Thread.sleep(Native Method)
at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.java:46)

Locked ownable synchronizers:
- None

"QuartzScheduler_QuartzScheduler-NON_CLUSTERED_MisfireHandler" - Thread t@8712
java.lang.Thread.State: TIMED_WAITING
at java.lang.Thread.sleep(Native Method)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3914)

Locked ownable synchronizers:
- None

"QuartzScheduler_Worker-1" - Thread t@6735
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait(Native Method)
- waiting on <33997429> (a org.quartz.simpl.SimpleThreadPool$WorkerThread)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:528)

Locked ownable synchronizers:
- None


请问如何解决?
猜测:"ActiveMQ Data File Writer" 是在往队列里面写的时候多个线程强资源导致的!
请问,
1.如果我在往消息队列文件里面写消息的时候加上同步(synchronized)会对效率造成很大影响么?
2.想在消费消息的时候也加上同步,,是否效率就更糟糕了?

消息队里高峰期并发数大约 5000!
跪求大侠们的帮助!!!!!!!!!!!!!!!!!!!!!!
...全文
1511 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2014-12-01
  • 打赏
  • 举报
回复
JMS成为你消息缓冲区,进入的消息太多,处理不过来,导致写消息存储文件阻塞。两个处理方法: 增加消息消费者的并发,比如增加MDB的并发数。不一定能解决问题,消息消费者可能还有瓶颈,比如业务系统的数据库 增加消息存储容量,特别是memoryLimit,也可以使用外部DB保存 jms本来就是异步的 无论生产者还是消费者,都不需要synchronized LMAX-Exchange/disruptor 考虑用这个框架进行排队处理
猿人林克 2014-11-23
  • 打赏
  • 举报
回复
建议往队列一推消息时候都用synchronized,保证线程安全,本来就应该是单线程进队列(队列永远是一条一条进,不能同时进两条),多线程很容易就冲突了。 消费消息的时候没有任何关系,完全不用加synchronized,不会导致任何问题。 也就是对于同一个队列,进的时候排队一条一条进,出的时候可以并发出,不会出问题。
z6165039 2014-09-04
  • 打赏
  • 举报
回复
改成同步于事无补!!!
youyouxiaoya 2014-09-04
  • 打赏
  • 举报
回复
帮顶,希望LZ问题尽快解决
Eve0116 2014-09-04
  • 打赏
  • 举报
回复
顶顶

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧