users@grizzly.java.net

Re: Why so many threads?

From: Oleksiy Stashok <Oleksiy.Stashok_at_Sun.COM>
Date: Wed, 10 Sep 2008 10:44:16 +0200

Just checked your code. After running it - I see just 10 Selector
polling threads. With names:
"GrizzlyReadController-N" N=[0..9]
"Thread-1"

You sure, that you start just this Controller just once?
Can you pls. attach full kill -3 dump?

Thanks.

WBR,
Alexey.

On Sep 10, 2008, at 5:51 , gnome wrote:

>
> hi, Alexey
>
> Thank you for you reply.
> I see at least 20 threads and I did not read every line of the log.
>
> But I set the read thread count to 10.
>
>
> Michael
>
> Oleksiy Stashok wrote:
>>
>> Hi,
>>
>> how many threads you see in the mentioned state?
>>
>> Thanks.
>>
>> WBR,
>> Alexey.
>>
>> On Sep 9, 2008, at 15:44 , gnome wrote:
>>
>>>
>>> Hi all,
>>> I am using grizzly for a nio server. And it always take 800% CPU
>>> on a
>>> multi-core system. In kill -3 log there is many thread is doing
>>> epollWait()
>>> like this:
>>> "Thread-27" prio=10 tid=0x00002aaaf72c8400 nid=0x7217 runnable
>>> [0x0000000043159000..0x0000000043159ab0]
>>> java.lang.Thread.State: RUNNABLE
>>> at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
>>> at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:
>>> 215)
>>> at
>>> sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
>>> at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:
>>> 69)
>>> - locked <0x00002aaab35a5e78> (a sun.nio.ch.Util$1)
>>> - locked <0x00002aaab35a5e60> (a
>>> java.util.Collections$UnmodifiableSet)
>>> - locked <0x00002aaab35a5ad0> (a sun.nio.ch.EPollSelectorImpl)
>>> at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
>>> at
>>> com.sun.grizzly.TCPSelectorHandler.select(TCPSelectorHandler.java:
>>> 343)
>>> at com.sun.grizzly.Controller.doSelect(Controller.java:280)
>>> at com.sun.grizzly.ReadController.start(ReadController.java:
>>> 108)
>>> - locked <0x00002aaab35a6120> (a java.lang.Object)
>>> at com.sun.grizzly.Controller.run(Controller.java:652)
>>> at java.lang.Thread.run(Thread.java:619)
>>>
>>>
>>> The server code is:
>>>
>>> int port = 5333;
>>> try {
>>> Controller controller = new Controller();
>>> TCPSelectorHandler selectorHandler = new
>>> TCPSelectorHandler(false);
>>> selectorHandler.setPort(port);
>>> selectorHandler.setSocketTimeout(5 * 60 * 1000);
>>> selectorHandler.setSelectTimeout(50);
>>> controller.setSelectorHandler(selectorHandler);
>>> controller.setReadThreadsCount(10);
>>> controller.setHandleReadWriteConcurrently(true);
>>>
>>> DefaultSelectionKeyHandler keyHandler = new
>>> DefaultSelectionKeyHandler(
>>> selectorHandler) {
>>>
>>> @Override
>>> public void register(Iterator<SelectionKey> iterator, int ops) {
>>> long currentTime = System.currentTimeMillis();
>>> SelectionKey key;
>>> while (iterator.hasNext()) {
>>> key = iterator.next();
>>> iterator.remove();
>>> if (!key.isValid()) {
>>> continue;
>>> }
>>>
>>> key.interestOps(key.interestOps() | ops);
>>> Object attachment = key.attachment();
>>> // By default, attachment a null.
>>> if (attachment == null) {
>>> key.attach(currentTime);
>>> } else if (attachment instanceof ThreadAttachment) {
>>> }
>>> }
>>> }
>>> };
>>> selectorHandler.setSelectionKeyHandler(keyHandler);
>>>
>>> final DefaultProtocolChain protocolChain = new
>>> DefaultProtocolChain();
>>>
>>> DefaultProtocolChainInstanceHandler instanceHandler = new
>>> DefaultProtocolChainInstanceHandler() {
>>> /**
>>> * Always return instance of ProtocolChain.
>>> */
>>> @Override
>>> public ProtocolChain poll() {
>>> return protocolChain;
>>> }
>>>
>>> /**
>>> * Pool an instance of ProtocolChain.
>>> */
>>> @Override
>>> public boolean offer(ProtocolChain instance) {
>>> return true;
>>> }
>>> };
>>>
>>> controller.setProtocolChainInstanceHandler(instanceHandler);
>>>
>>> protocolChain.addFilter(new MimoXMLReadFilter(true));
>>>
>>> DefaultPipeline pipeLine = new DefaultPipeline(3,2
>>> "pipeline", port, 3);
>>> pipeLine.setInitialByteBufferSize(8192);
>>> controller.setPipeline(pipeLine);
>>>
>>> new Thread(controller).start();
>>>
>>> } catch (Exception e) {
>>> log.error("Error starting on port " + port, e);
>>> }
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Why-so-many-threads--tp19392738p19392738.html
>>> Sent from the Grizzly - Users mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
>>> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
>> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Why-so-many-threads--tp19392738p19405854.html
> Sent from the Grizzly - Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>