The selector is probably not the issue. If there is no incoming traffic,
selector.select(300) won't return until after 300ms.

Thanks,

Jun

On Thu, Sep 17, 2015 at 1:13 PM, Jaikiran Pai <jai.forums2...@gmail.com>
wrote:

> Sending this to the dev list since the Kafka dev team might have more
> inputs on this one. Can someone please take a look at the issue noted below
> and whether the suggested change makes sense?
>
> -Jaikiran
>
> On Tuesday 15 September 2015 12:03 AM, Jaikiran Pai wrote:
>
>> We have been using Kafka for a while now in one of dev projects.
>> Currently we have just 1 broker and 1 zookeeper instance. Almost every day,
>> Kafka "stalls" and we end up cleaning up the data/log folder of Kafka and
>> zookeeper and bring it up afresh. We haven't been able to narrow down the
>> issue yet.
>>
>> However, keeping aside that part for a while, we have been noticing that
>> even when the system/application is completely idle, the Kafka process
>> seems to take up unreasonably high CPU (10-15% constantly shown in top
>> command). We have taken multiple thread dumps and each of them have this:
>>
>> "kafka-socket-acceptor" #24 prio=5 os_prio=0 tid=0x00007f62685d9000
>> nid=0x2d47 runnable [0x00007f6231464000]
>>    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:86)
>>     - locked <0x00000000ca77a458> (a sun.nio.ch.Util$2)
>>     - locked <0x00000000ca77a440> (a
>> java.util.Collections$UnmodifiableSet)
>>     - locked <0x00000000ca774550> (a sun.nio.ch.EPollSelectorImpl)
>>     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
>>     at kafka.network.Acceptor.run(SocketServer.scala:215)
>>     at java.lang.Thread.run(Thread.java:745)
>>
>> "kafka-network-thread-9092-2" #23 prio=5 os_prio=0 tid=0x00007f62685d6800
>> nid=0x2d46 runnable [0x00007f6231565000]
>>    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:86)
>>     - locked <0x00000000ca77d050> (a sun.nio.ch.Util$2)
>>     - locked <0x00000000ca77d038> (a
>> java.util.Collections$UnmodifiableSet)
>>     - locked <0x00000000ca7745e0> (a sun.nio.ch.EPollSelectorImpl)
>>     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
>>     at kafka.network.Processor.run(SocketServer.scala:320)
>>     at java.lang.Thread.run(Thread.java:745)
>>
>> "kafka-network-thread-9092-1" #22 prio=5 os_prio=0 tid=0x00007f62685c7800
>> nid=0x2d45 runnable [0x00007f6231666000]
>>    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:86)
>>     - locked <0x00000000ca77e590> (a sun.nio.ch.Util$2)
>>     - locked <0x00000000ca77e578> (a
>> java.util.Collections$UnmodifiableSet)
>>     - locked <0x00000000ca7746b8> (a sun.nio.ch.EPollSelectorImpl)
>>     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
>>     at kafka.network.Processor.run(SocketServer.scala:320)
>>     at java.lang.Thread.run(Thread.java:745)
>>
>> "kafka-network-thread-9092-0" #21 prio=5 os_prio=0 tid=0x00007f62685b9000
>> nid=0x2d44 runnable [0x00007f6231767000]
>>    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:86)
>>     - locked <0x00000000ca77fbd0> (a sun.nio.ch.Util$2)
>>     - locked <0x00000000ca77fbb8> (a
>> java.util.Collections$UnmodifiableSet)
>>     - locked <0x00000000ca774790> (a sun.nio.ch.EPollSelectorImpl)
>>     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
>>     at kafka.network.Processor.run(SocketServer.scala:320)
>>     at java.lang.Thread.run(Thread.java:745)
>>
>>
>>
>>
>> Looking at the code of 0.8.2.1, this piece of code looks like
>> https://github.com/apache/kafka/blob/0.8.2.1/core/src/main/scala/kafka/network/SocketServer.scala#L314
>> :
>>
>> while(isRunning) {
>> ...
>>     val ready = selector.select(300)
>>     ...
>>     if(ready > 0) {
>>         ...
>>     }
>> ...
>> }
>>
>> This looks like a (always) "busy" while loop when selector.select returns
>> 0. Could a sleep for a few milli. seconds help in this case? Similar code
>> is present in the Acceptor in that same file, which does this exact thing.
>> Would adding some small sleep in there help with reducing the CPU usage
>> when things are idle?
>>
>> -Jaikiran
>>
>>
>>
>

Reply via email to