users@grizzly.java.net

Why so many threads?

From: gnome <foreverqihe_at_gmail.com>
Date: Tue, 9 Sep 2008 06:44:13 -0700 (PDT)

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.