You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Emmanuel Lecharny (JIRA)" <ji...@apache.org> on 2017/08/30 09:51:00 UTC

[jira] [Commented] (DIRMINA-1070) Avoid unbounded message queueing when sending large amounts of data to slow clients

    [ https://issues.apache.org/jira/browse/DIRMINA-1070?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16146987#comment-16146987 ] 

Emmanuel Lecharny commented on DIRMINA-1070:
--------------------------------------------

This is just plain normal behaviour. You application must take care of a slow client.

Basically, you should not send a new response unless the previous one has been fully sent (ie, you've got a {{messageSent}} event).

Of course, it might be a bit limitating, so you can decide to wait a bit before stopping sending new data to a slow client, but again, this is an application decision, not a MINA decision.

All in all, here is what your application should do :

- when receiving a message, process it
- check that the previous message has been sent properly (or aborted, ie an exception has been received) checking a flag in the session attributes
- if it's ok, write the response
- otherwise, deal with the issue (ie discard the request, stack the response up to a limit your application would set, kill the session, etc)

Keep in mind that MINA is based on an asynchronous mechanism, so your session is actually never blocked on write like a synchronous system would, so every time you write something back to your client, it's either sent immediately to the socket, or if this socket is already full, it's stacked in a queue for a later processing (and this is the reason you see the memory being consumed fast with slow readers).

> Avoid unbounded message queueing when sending large amounts of data to slow clients
> -----------------------------------------------------------------------------------
>
>                 Key: DIRMINA-1070
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1070
>             Project: MINA
>          Issue Type: New Feature
>          Components: Core
>            Reporter: jpalacios
>              Labels: stability
>
> Our application runs an Apache MINA server to provide SSH support. We are seeing {{OutOfMemoryError}}s when certain clients establish a session with a large {{Window}} size. Particularly clients like TortoiseGit (which uses TortoisePlink which in turn seems to use Putty) use an initial window size of 2GB. From heap dumps we can see that the {{DefaultWriteRequestQueue}} is filling up with {{WriteRequest}} instances and taking up gigabytes of space until the heap blows. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)