wowza java cpu使用率高

sam*_*han 1 java cpu multithreading wowza mina

我对wowza中的cpu使用有疑问。

这是令人怀疑的线程。此线程占用了较高的CPU。

SocketAcceptorIoProcessor-1.0 prio=10 tid=0x0000002a9fb53000 nid=0x2428 runnable         [0x000000004f017000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:210)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
- locked <0x00000007d82ba4e8> (a sun.nio.ch.Util$2)
- locked <0x00000007d82ba4d8> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000007d82ad450> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(Unknown Source)
at org.apache.mina.util.NamePreservingRunnable.run(Unknown Source)
at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)

此线程占用了很高的CPU。这是jdk错误吗?

这是我的环境。

CentOS版本5.4(最终版)

WowzaMediaServer-3.1.2

Java版本1.6.0_23 Java SE运行时环境(内部版本1.6.0_23-b05)Java HotSpotTM 64位服务器VM(内部版本19.0-b09,混合模式)

Pet*_*rey 5

我首先要检查它是否确实在消耗CPU。如果要对应用程序进行性能分析,则在该方法实际上处于阻塞状态时,似乎在此方法上花费了时间。大多数探查器在分辨一种方法上花费了很多时间,这两种方法之间的区别是:在本机代码中分配时间(消耗大量CPU)和在阻塞性方法(消耗很少的CPU)之间进行分配。

较旧的Java版本具有可能导致选择器旋转的错误。也就是说,即使在其他情况下它仍然可以正常运行,它也不会返回任何选择器而不会阻塞忙循环。我相信较新版本的Java已解决此问题。我会尝试使用Java 6 update 35或Java 7 update 7来解决问题。

如果连接数少于几百个,我更喜欢使用阻塞NIO,因为IMHO更为简单。