I agree and have created https://issues.apache.org/jira/browse/ZEPPELIN-1084
.

Best,
Prasad

On Tue, Jun 28, 2016 at 11:41 PM, Johnny W. <jzw.ser...@gmail.com> wrote:

> Thanks, Prasad! This is very helpful. The version we are using already
> includes Jetty 9 & Zeppelin-820.
>
> However, we still see web hangs quite frequently caused by broadcasting
> updateNote. I may remove the synchronized block on noteSocketMap as a
> temporary fix, but I am wondering whether there is a better solution.
>
> + zeppelin-dev, since this issue may significantly limit the scalability
> of Zeppelin if there is a bad connection. One potential optimization can
> be: instead of lock the whole map, use fine-grained lock on map entries.
>
> Best,
> Johnny
>
>
>
>
> On Tue, Jun 28, 2016 at 4:34 AM, Prasad Wagle <prasadwa...@gmail.com>
> wrote:
>
>> Hi Johnny,
>>
>> What version of the server are you using?
>>
>> You may be interested in the following:
>>
>> Email thread
>> <http://mail-archives.apache.org/mod_mbox/zeppelin-users/201604.mbox/%3CCAMKL62nmLDJRghYB39MdnbAiRT6wvso0eVePKRtKurmu5iM%2BuQ%40mail.gmail.com%3E>
>> discussing zeppelin server hangs and reducing websocket connections
>> From the thread: "I removed synchronized (noteSocketMap) from broadcast
>> so that one bad
>>    socket does not hang the server." This change helps with performance
>> as well and hasn't caused any problems. However, this is not a long-term
>> solution and we need to find a better one.
>>
>> Jira issue: Reduce websocket communication by unicasting instead of
>> broadcasting note list (
>> https://issues.apache.org/jira/browse/ZEPPELIN-820)
>>
>> Prasad
>>
>> On Mon, Jun 20, 2016 at 5:04 PM, Johnny W. <jzw.ser...@gmail.com> wrote:
>>
>>> Hi zeppelin-users,
>>>
>>> This is my first email to the top-level mailing list. Congratulations
>>> for graduation!
>>>
>>> We are hitting some performance issues when multiple users are connected
>>> to the Zeppelin server. From the stack trace, many of the connections are
>>> blocked on a HashMap, which is locked by
>>> org.apache.zeppelin.socket.NotebookServer.broadcastNote.
>>>
>>> Our largest notebook is around 800K, and there are around 10 - 20
>>> connections to the Zeppelin server. I think it should be we are
>>> broadcasting some large amount of data to multiple users, and some slow
>>> connections hang the whole web interface.
>>>
>>> Is there anyway to reduce the number of broadcasts to improve the web
>>> performance? It is fine for us to refresh and get updates. I've attached
>>> the full stack trace of this issue as well.
>>>
>>> Thanks!
>>>
>>> Johnny
>>>
>>> Blocking Thread:
>>> --
>>> "qtp1874598090-2478" prio=10 tid=0x00007f2fb0003800 nid=0x3373 waiting
>>> on condition [0x00007f329ebe9000]
>>>    java.lang.Thread.State: WAITING (parking)
>>>         at sun.misc.Unsafe.park(Native Method)
>>>         - parking to wait for  <0x0000000704e15db0> (a
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>>>         at
>>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>>>         at
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>>>         at
>>> org.eclipse.jetty.util.SharedBlockingCallback$Blocker.block(SharedBlockingCallback.java:219)
>>>         at
>>> org.eclipse.jetty.websocket.common.BlockingWriteCallback$WriteBlocker.block(BlockingWriteCallback.java:83)
>>>         at
>>> org.eclipse.jetty.websocket.common.WebSocketRemoteEndpoint.blockingWrite(WebSocketRemoteEndpoint.java:107)
>>>         at
>>> org.eclipse.jetty.websocket.common.WebSocketRemoteEndpoint.sendString(WebSocketRemoteEndpoint.java:387)
>>>         at
>>> org.apache.zeppelin.socket.NotebookSocket.send(NotebookSocket.java:69)
>>>         at
>>> org.apache.zeppelin.socket.NotebookServer.broadcast(NotebookServer.java:304)
>>>         - locked <0x00000007006b6100> (a java.util.HashMap)
>>>         at
>>> org.apache.zeppelin.socket.NotebookServer.broadcastNote(NotebookServer.java:384)
>>>         at
>>> org.apache.zeppelin.socket.NotebookServer.updateNote(NotebookServer.java:492)
>>>         at
>>> org.apache.zeppelin.socket.NotebookServer.onMessage(NotebookServer.java:181)
>>>         at
>>> org.apache.zeppelin.socket.NotebookSocket.onWebSocketText(NotebookSocket.java:56)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:128)
>>>         at
>>> org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:65)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:122)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:161)
>>>         at
>>> org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:309)
>>>         at
>>> org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214)
>>>         at
>>> org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220)
>>>         at
>>> org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258)
>>>         at
>>> org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)
>>>         at
>>> org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)
>>>         at
>>> org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
>>>         at
>>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
>>>         at
>>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
>>>         at java.lang.Thread.run(Thread.java:745)
>>>
>>> Blocked Thread:
>>> --
>>> "qtp1874598090-2498" prio=10 tid=0x00007f306000f800 nid=0x4075 waiting
>>> for monitor entry [0x00007f329eae9000]
>>>    java.lang.Thread.State: BLOCKED (on object monitor)
>>>         at
>>> org.apache.zeppelin.socket.NotebookServer.addConnectionToNote(NotebookServer.java:229)
>>>         - waiting to lock <0x00000007006b6100> (a java.util.HashMap)
>>>         at
>>> org.apache.zeppelin.socket.NotebookServer.sendNote(NotebookServer.java:432)
>>>         at
>>> org.apache.zeppelin.socket.NotebookServer.onMessage(NotebookServer.java:145)
>>>         at
>>> org.apache.zeppelin.socket.NotebookSocket.onWebSocketText(NotebookSocket.java:56)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:128)
>>>         at
>>> org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:65)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:122)
>>>         at
>>> org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:161)
>>>         at
>>> org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:309)
>>>         at
>>> org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214)
>>>         at
>>> org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220)
>>>         at
>>> org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258)
>>>         at
>>> org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)
>>>         at
>>> org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)
>>>         at
>>> org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
>>>         at
>>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
>>>         at
>>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
>>>         at java.lang.Thread.run(Thread.java:745)
>>>
>>>
>>
>

Reply via email to