On 12/13/2013 8:12 AM, Bob DeRemer wrote:
Hi Mark (et al),

We’re seeing really high CPU utilization with just a 1000 active
websockets that are sending/receiving 100 byte binary messages.   The
profiling snippet below was with 1000 connections.  If we start to
increase the number of connections, the time spent in the NIO logic
starts to consume the majority of the processing.  As a result, I’m
trying to verify:

How many cores does your cpu have? You might be thrashing your cpu with excessive context switching because of the large number of threads. If that's the case, then throwing more lower-power cores at it may be of use.



·Is this something that can be tuned/improved using Tomcat’s NIO settings?

·Is this a bug in Tomcat 7 (websocket/NIO)?

·Are we hitting some issue with 1000+ highly active NIO sockets?

The nature of this application is that it’s primary functionality is to
process binary messages on (ideally 10 – 20K websockets), forward them
to another server for processing, then send the responses back.  As a
result, the performance of the websocket communication is a critical
factor for success.

Please let me know if you’d like to discuss this – I’m available any time.

Thanks,

Bob

We have been profiling this in YourKit and as we increase the number of
websockets, naturally we see the CPU utilization increase.  The concern
is that we’re seeing this at what seems to be a fairly low number of
websockets.  The YourKit profiling showed 41% of the time being spent in
the following code.  My apologies for the formatting.  I can provide an
attachment out-of-band if it would be helpful.

|
+---org.apache.tomcat.util.net.NioEndpoint$Poller.run()
|  38,594   41 %  |              0  |

|      | |
                                           |
|                 |

|      |
+---sun.nio.ch.SelectorImpl.select(long)
|  25,615   27 %  |              0  |

|      | | |
                                                                                
           |                 |                 |

|      | |
+---sun.nio.ch.SelectorImpl.lockAndDoSelect(long)
|  25,615   27 %  |              0  |

|      | |
|
|                 |                 |

|      | |
+---sun.nio.ch.WindowsSelectorImpl.doSelect(long)
                                   |  25,615   27 %  |             46  |

|      | |
|
|                 |                 |

|      | |
+---sun.nio.ch.WindowsSelectorImpl.resetWakeupSocket()
|  13,681   14 %  |          1,107  |

|      | |
|
|                 |                 |

|      | |
+---sun.nio.ch.WindowsSelectorImpl$StartLock.access$300(WindowsSelectorImpl$StartLock)
|  10,826   11 %  |              0  |

|      | |
|
                           |                 |                 |

|      | |
+---sun.nio.ch.WindowsSelectorImpl.updateSelectedKeys()
|   1,029    1 %  |              0  |

|      | |     |
                                                                           |    
             |                 |

|      | |
+---sun.nio.ch.SelectorImpl.processDeregisterQueue()
|      31    0 %  |              0  |

|      |
|
|                 |                 |

|      |
+---org.apache.tomcat.util.net.NioEndpoint$Poller.processKey(SelectionKey,
NioEndpoint$KeyAttachment)    |  11,996   13 %  |             31  |

|      | |
|
|                 |                 |

|      | |
+---org.apache.tomcat.util.net.NioEndpoint.processSocket(NioChannel,
SocketStatus, boolean)            |  11,778   12 %  |              0  |

|      | | |
|
           |                 |                 |

|      | | |
+---org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(Runnable)
|  11,746   12 %  |              0  |

|      | | | | |
                                                           |                 |  
               |

|      | | | |
+---org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(Runnable,
long, TimeUnit)            |  11,746   12 %  |              0  |

|      | | | |
|
|                 |                 |

|      | | | |
+---java.util.concurrent.ThreadPoolExecutor.execute(Runnable)
   |  11,746   12 %  |             15  |

|      | | | |
|
|                 |                 |

|      | | | |
+---org.apache.tomcat.util.threads.TaskQueue.offer(Object)
|  11,731   12 %  |              0  |

|      | | | |
|
|                 |                 |

|      | | | |
      +---org.apache.tomcat.util.threads.TaskQueue.offer(Runnable)              
                   |  11,731   12 %  |             46  |

|      | | | |
|
|                 |                 |

|      | | | |
+---java.util.concurrent.LinkedBlockingQueue.offer(Object)
|  11,668   12 %  |             15  |

*Bob DeRemer*

*Senior Director, Architecture and Development*

Description: Description: Description: Description:
cid:image001.png@01CBE3DE.51A12030

http://www.thingworx.com <http://www.thingworx.com/>

Skype: bob.deremer.thingworx

O: 610.594.6200 x812

M: 717.881.3986



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to