2016-03-03 128 views
2

我正在運行使用vet.x的java應用程序8使用centOS的24核心CPU上的實例,使用threadpool插入rabbitMQ,有時我的CPU使用率達到100%,應用程序堅持了一段時間 同時在同一服務器上我運行RabbitMQ的消費者收到信也有我使用線程池服務使用threadpool執行器服務的Vert.x服務,CPU使用率高

2016-03-03 11:17:06 
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.71-b01 mixed mode): 

"Attach Listener" daemon prio=10 tid=0x00007ff088001000 nid=0x3b53 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"pool-1-thread-2" prio=10 tid=0x00007ff050104000 nid=0x3846 waiting on condition [0x00007ff110d92000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
     at sun.misc.Unsafe.park(Native Method) 
     - parking to wait for <0x000000072eca42c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
     at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
     at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807) 
     at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-1" prio=10 tid=0x00007ff05003d800 nid=0x3845 runnable [0x00007ff110e93000] 
    java.lang.Thread.State: RUNNABLE 
     at java.net.SocketInputStream.socketRead0(Native Method) 
     at java.net.SocketInputStream.read(SocketInputStream.java:152) 
     at java.net.SocketInputStream.read(SocketInputStream.java:122) 
     at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
     at java.io.BufferedInputStream.read(BufferedInputStream.java:254) 
     - locked <0x000000072ec17850> (a java.io.BufferedInputStream) 
     at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) 
     at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95) 
     at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:139) 
     - locked <0x000000072ec17830> (a java.io.DataInputStream) 
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:534) 
     at java.lang.Thread.run(Thread.java:745) 

"threadDeathWatcher-2-1" daemon prio=10 tid=0x00007ff060265000 nid=0x3844 waiting on condition [0x00007ff111f95000] 
    java.lang.Thread.State: TIMED_WAITING (sleeping) 
     at java.lang.Thread.sleep(Native Method) 
     at io.netty.util.ThreadDeathWatcher$Watcher.run(ThreadDeathWatcher.java:113) 
     at java.lang.Thread.run(Thread.java:745) 

"vert.x-eventloop-thread-0" daemon prio=10 tid=0x00007ff05c00f000 nid=0x3841 runnable [0x00007ff112096000] 
    java.lang.Thread.State: RUNNABLE 
     at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
     at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) 
     at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79) 
     at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87) 
     - locked <0x0000000411810180> (a io.netty.channel.nio.SelectedSelectionKeySet) 
     - locked <0x0000000411810170> (a java.util.Collections$UnmodifiableSet) 
     - locked <0x0000000411810128> (a sun.nio.ch.EPollSelectorImpl) 
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98) 
     at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618) 
     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:306) 
     at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
     at java.lang.Thread.run(Thread.java:745) 

"vert.x-eventloop-thread-8" daemon prio=10 tid=0x00007ff074019800 nid=0x383e runnable [0x00007ff112197000] 
    java.lang.Thread.State: RUNNABLE 
     at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
     at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) 
     at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79) 
     at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87) 
     - locked <0x0000000411810330> (a io.netty.channel.nio.SelectedSelectionKeySet) 
     - locked <0x0000000411810320> (a java.util.Collections$UnmodifiableSet) 
     - locked <0x00000004118102d8> (a sun.nio.ch.EPollSelectorImpl) 
     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98) 
     at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618) 
     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:306) 
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
     at java.lang.Thread.run(Thread.java:745) 

"vert.x-eventloop-thread-7" daemon prio=10 tid=0x00007ff074017800 nid=0x383d runnable [0x00007ff112298000] 
    java.lang.Thread.State: RUNNABLE 
     at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
     at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) 
     at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79) 
     at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:88) 
     - locked <0x0000000411813190> (a io.netty.channel.nio.SelectedSelectionKeySet) 
     - locked <0x0000000411813180> (a java.util.Collections$UnmodifiableSet) 
     - locked <0x0000000411813138> (a sun.nio.ch.EPollSelectorImpl) 
     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98) 
     at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618) 
     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:306) 
     at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
     at java.lang.Thread.run(Thread.java:745) 
"vert.x-eventloop-thread-6" daemon prio=10 tid=0x00007ff074015000 nid=0x383c runnable [0x00007ff112399000] 
    java.lang.Thread.State: RUNNABLE 
     at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
     at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) 
     at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79) 
     at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87) 
     - locked <0x0000000411813340> (a io.netty.channel.nio.SelectedSelectionKeySet) 
     - locked <0x0000000411813330> (a java.util.Collections$UnmodifiableSet) 
     - locked <0x00000004118132e8> (a sun.nio.ch.EPollSelectorImpl) 
     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98) 
     at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618) 
     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:306) 
     at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
     at java.lang.Thread.run(Thread.java:745) 

"vert.x-eventloop-thread-7" daemon prio=10 tid=0x00007ff074017800 nid=0x383d runnable [0x00007ff112298000] 
    java.lang.Thread.State: RUNNABLE 
     at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
     at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) 
     at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79) 
     at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:88) 
     - locked <0x0000000411813190> (a io.netty.channel.nio.SelectedSelectionKeySet) 
     - locked <0x0000000411813180> (a java.util.Collections$UnmodifiableSet) 
     - locked <0x0000000411813138> (a sun.nio.ch.EPollSelectorImpl) 
     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98) 
     at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618) 
     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:306) 
     at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) 
     at java.lang.Thread.run(Thread.java:745) 


. 
    . 
    similar types of threads 
    . 
    . 
"vert.x-worker-thread-0" daemon prio=10 tid=0x00007ff14c6f8800 nid=0x3836 waiting on condition [0x00007ff11299f000] 
    java.lang.Thread.State: WAITING (parking) 
     at sun.misc.Unsafe.park(Native Method) 
     - parking to wait for <0x000000041181b260> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
     at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 
     at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) 
     at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) 
     at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
"Service Thread" daemon prio=10 tid=0x00007ff14c0bd800 nid=0x3832 runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread1" daemon prio=10 tid=0x00007ff14c0bb800 nid=0x3831 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread0" daemon prio=10 tid=0x00007ff14c0b8800 nid=0x3830 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Signal Dispatcher" daemon prio=10 tid=0x00007ff14c0b6000 nid=0x382f runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    "Reference Handler" daemon prio=10 tid=0x00007ff14c08b000 nid=0x382d in Object.wait() [0x00007ff113ffe000] 
     java.lang.Thread.State: WAITING (on object monitor) 
      at java.lang.Object.wait(Native Method) 
      - waiting on <0x0000000411821098> (a java.lang.ref.Reference$Lock) 
      at java.lang.Object.wait(Object.java:503) 
      at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) 
      - locked <0x0000000411821098> (a java.lang.ref.Reference$Lock) 

    "main" prio=10 tid=0x00007ff14c009000 nid=0x3819 waiting on condition [0x00007ff153b03000] 
     java.lang.Thread.State: WAITING (parking) 
      at sun.misc.Unsafe.park(Native Method) 
      - parking to wait for <0x0000000411825030> (a java.util.concurrent.CountDownLatch$Sync) 
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 
      at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) 
     at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:236) 
      at org.vertx.java.platform.impl.cli.Starter.block(Starter.java:382) 
      at org.vertx.java.platform.impl.cli.Starter.runVerticle(Starter.java:376) 
      at org.vertx.java.platform.impl.cli.Starter.<init>(Starter.java:88) 
      at org.vertx.java.platform.impl.cli.Starter.main(Starter.java:55) 

    "VM Thread" prio=10 tid=0x00007ff14c087000 nid=0x382c runnable 

    "GC task thread#0 (ParallelGC)" prio=10 tid=0x00007ff14c01e800 nid=0x381a runnable 

    "GC task thread#1 (ParallelGC)" prio=10 tid=0x00007ff14c020800 nid=0x381b runnable 

    "GC task thread#2 (ParallelGC)" prio=10 tid=0x00007ff14c022800 nid=0x381c runnable 

    "GC task thread#3 (ParallelGC)" prio=10 tid=0x00007ff14c024800 nid=0x381d runnable 

    "GC task thread#4 (ParallelGC)" prio=10 tid=0x00007ff14c026000 nid=0x381e runnab 
+0

對於I/O操作,您可以嘗試將它用於正常垂直中的工作者垂直或vertex.executeBlocking中。您可以在vertx核心文檔中找到更多詳細信息:http://vertx.io/docs/vertx-core/java/#blocking_code – foxgem

回答

1

看來你是從事件循環中調用你的RabbitMQ客戶端。它通常被禁止,因爲你阻止了事件循環。您應該使用vertx.executeBlocking中的rabbitmq客戶端來處理像rabbitmq這樣的遠程服務。您的代碼將使用來自工作池的線程執行。從vert.x 3.3開始,您可以更密切地監視工作池。

我建議嘗試一下Vertex.x的rabbitmq-client:http://vertx.io/docs/vertx-rabbitmq-client/java/,因爲它爲你管理executeBlocking的東西。

相關問題