Make sure you enable BBR TCP on your host machines to help mitigate the network problems.
On Thu, Apr 9, 2020 at 10:58 AM Nitin Phuria <nit...@integramicro.com> wrote: > Dear Jonathan, > > > > Thanks for bringing more clarity on Processor Thread and > it's relation with IoSession. We are also suspecting the network connection > and in a crisis one should pull all the strings to check where you get the > lead to identify the problem and that's what we are doing. > > > > Thanks a tone for all your replies and giving very useful information. We > will check further on network connection. > > > > Thanks And Regards, > > Nitin Phuria > > > > *Confidentiality Disclaimer**: “The information contained in this > electronic message (email) and any attachments to this email are intended > for the exclusive use of the addressee(s) and access to this email by > anyone else is unauthorized. The email may contain proprietary, > confidential or privileged information or information relating to Integra > Group. If you are not the intended recipient, please notify the sender by > telephone, fax, or return email and delete this communication and any > attachments thereto, immediately from your computer. Any dissemination, > distribution, or copying of this communication and the attachments thereto > (in whole or part), in any manner, is strictly prohibited and actionable at > law. The recipient acknowledges that emails are susceptible to alteration > and their integrity cannot be guaranteed and that Company does not > guarantee that any e-mail is virus-free and accept no liability for any > damage caused by any virus transmitted by this email.”* > > > > *From:* Jonathan Valliere [mailto:jon.valli...@emoten.com] > *Sent:* 09 April 2020 20:03 > *To:* Nitin Phuria > *Cc:* users@mina.apache.org > *Subject:* Re: MINA: ExecutorFilter on NioSocketConnector > > > > Every IoSession is bound to one Processor Thread. So only by creating > more IoSessions can you take advantage of multiple Processor Threads. > > > > ExecutorFilter only works for received messages. So it generally does > nothing on the client side however it will cause the received messages to > be executed in multiple threads. > > > > The purpose of the ExecutorFilter is to do potentially blocking tasks in > there so as not to block the Processor Thread from handling tasks from > other IoSessions. > > > > Since you’re seeing a huge jump from 15ms to several minutes and a very > small number of messages it is most likely a problem with your network > connection. > > > > On Thu, Apr 9, 2020 at 10:26 AM Nitin Phuria <nit...@integramicro.com> > wrote: > > Dear Jonathan, > > Our Server and System-B are on WAN network with leased line. > > > > One more clarification required As per documentation > > > > NioSocketConnector > <http://mina.apache.org/mina-project/gen-docs/2.0.10/apidocs/org/apache/mina/transport/socket/nio/NioSocketConnector.html#NioSocketConnector--> > () Constructor for NioSocketConnector > <http://mina.apache.org/mina-project/gen-docs/2.0.10/apidocs/org/apache/mina/transport/socket/nio/NioSocketConnector.html> > with default configuration (multiple thread model). > > > > So when we create NioSocketConnector connector = new NioSocketConnector(); I > expect it to create n+1 processor > > where n is number of core on the hardware. In our case it is 17 (16 core > machine) > > > > When we took threaddump of our Server process I could see only one thread > for this connector and in the log (log4j) when we print the thread name it > prints NioProcessor-x where x is some number. > > > > So does it means that n+1 processors use single thread to work. > > > > Also you mentioned that The ExecutorFilter only works for the Server > receiver side. > > > > > http://apache-mina.10907.n7.nabble.com/OrderedThreadPoolExecutor-shutdown-problem-in-MINA-2-0-0-M4-td34417.html > > > > But I could see from this above URL that we can add it to Connector also > and it says "*My understanding is that the Executor filter just adds an > executor in the chain which will be used to spread the load on many > threads. This is an optimization, rather than something you need to use. If > you don't use it, your program will work fine.*" > > > > Could you provide more insight and your thoughts. > > > > Thanks And Regards, > > Nitin Phuria > > > > *Confidentiality Disclaimer**: “The information contained in this > electronic message (email) and any attachments to this email are intended > for the exclusive use of the addressee(s) and access to this email by > anyone else is unauthorized. The email may contain proprietary, > confidential or privileged information or information relating to Integra > Group. If you are not the intended recipient, please notify the sender by > telephone, fax, or return email and delete this communication and any > attachments thereto, immediately from your computer. Any dissemination, > distribution, or copying of this communication and the attachments thereto > (in whole or part), in any manner, is strictly prohibited and actionable at > law. The recipient acknowledges that emails are susceptible to alteration > and their integrity cannot be guaranteed and that Company does not > guarantee that any e-mail is virus-free and accept no liability for any > damage caused by any virus transmitted by this email.”* > > > > *From:* Jonathan Valliere [mailto:jon.valli...@emoten.com] > *Sent:* 09 April 2020 19:34 > *To:* Nitin Phuria > *Cc:* users@mina.apache.org > *Subject:* Re: MINA: ExecutorFilter on NioSocketConnector > > > > How far are the servers? TCP Packet loss could explain this. > > > > You can get the Queue size from the IoSession object. > > > > On Thu, Apr 9, 2020 at 10:02 AM Nitin Phuria <nit...@integramicro.com> > wrote: > > Dear Jonathan, > > > > Anytime we write message to System-B session with session.write method the > messageSent event has to be generated with it actually gets written on > TCP/IP > > > > org.apache.mina.core.session.IoSession.write(Object) > > > > We see that there is time difference of 10-14 seconds between timestamp of > session.write for particular message and messageSent event getting > generated for the same message. > > > > In non-peak load this time difference is in 10-15 milliseconds and in peak > load (60-70 messages per second) it goes till 10-14 seconds. > > > > Is there anything that we can log to see what is happening or see the > queue size etc.. for further better understaning. > > > > Thanks And Regards, > > Nitin Phuria > > > > *Confidentiality Disclaimer**: “The information contained in this > electronic message (email) and any attachments to this email are intended > for the exclusive use of the addressee(s) and access to this email by > anyone else is unauthorized. The email may contain proprietary, > confidential or privileged information or information relating to Integra > Group. If you are not the intended recipient, please notify the sender by > telephone, fax, or return email and delete this communication and any > attachments thereto, immediately from your computer. Any dissemination, > distribution, or copying of this communication and the attachments thereto > (in whole or part), in any manner, is strictly prohibited and actionable at > law. The recipient acknowledges that emails are susceptible to alteration > and their integrity cannot be guaranteed and that Company does not > guarantee that any e-mail is virus-free and accept no liability for any > damage caused by any virus transmitted by this email.”* > > > > *From:* Jonathan Valliere [mailto:jon.valli...@emoten.com] > *Sent:* 09 April 2020 18:31 > *To:* Nitin Phuria > *Cc:* Nitin Phuria; users@mina.apache.org > *Subject:* Re: MINA: ExecutorFilter on NioSocketConnector > > > > The ExecutorFilter only works for the Server receiver side. > > > > When you say the responses are slow, what do you consider slow? > > > > All writes are put into a queue dedicated for each session. The Session > is then enabled for writing by adding the write interest to the poll > mechanism. Reads and Writes IO happen in the same thread. After the > Session finishes reading it will then call the poll mechanism for new > events to process. Hopefully it should get the write event for your Session > then begin to flush the queue. > > > > Processor Thread Loop —> Select Poll Events —> Process Events > (read/write) —> Loop > > > > On Thu, Apr 9, 2020 at 8:53 AM Nitin Phuria <nit...@integramicro.com> > wrote: > > Dear Jonathan, > > Thanks for the reply, can you provide more details on the "All > writes are queued up and scheduled > later using the poll/kqueue system." How this poll & kqueue system works? > Do we have any control on this from MINA framework? > > We are not facing any problem with the higher CPU consumption but we see > that when there is high load from System-B to our server the reads from > System-B and write back to System-B on the single persistence session is > becoming slow. So we were looking at i/o operations and how to make them > fast. > > With your explanation provided in below email about ExecutorFilter, If we > add it in our connector after codec filter will help us reduce the I/O > overhead on reactor/processor thread. I hope my understanding is right > kindly confirm? > > > Thanks And Regards, > Nitin Phuria > > Confidentiality Disclaimer: “The information contained in this electronic > message (email) and any attachments to this email are intended for the > exclusive use of the addressee(s) and access to this email by anyone else > is unauthorized. The email may contain proprietary, confidential or > privileged information or information relating to Integra Group. If you are > not the intended recipient, please notify the sender by telephone, fax, or > return email and delete this communication and any attachments thereto, > immediately from your computer. Any dissemination, distribution, or copying > of this communication and the attachments thereto (in whole or part), in > any manner, is strictly prohibited and actionable at law. The recipient > acknowledges that emails are susceptible to alteration and their integrity > cannot be guaranteed and that Company does not guarantee that any e-mail is > virus-free and accept no liability for any damage caused by any virus > transmitted by this email.” > > -----Original Message----- > From: Jonathan Valliere [mailto:jon.valli...@emoten.com] > Sent: 09 April 2020 18:09 > To: Nitin Phuria > Cc: users@mina.apache.org > Subject: Re: MINA: ExecutorFilter on NioSocketConnector > > Mina is a queue and flush framework. All writes are queued up and scheduled > later using the poll/kqueue system. > > The ExecutorFilter uses threading to process incoming messages using a pool > of threads instead of the reactor/processor thread. This frees the > processor thread to do IO. > > Have you profiled the application to figure out which code is consuming the > CPU? > > On Thu, Apr 9, 2020 at 3:39 AM Nitin Phuria <nit...@integramicro.com > .invalid> > wrote: > > > Dear All, > > > > > > > > We have Server developed using MINA 2.0.16 where it > > connects > > to two other systems say System-A and System-B. > > > > > > > > The connectivity with both these system is persistence which means our > > server connects and create only single session with each of these systems > > and on the same session multiple message exchanges (Request/Response) > > happens. > > > > > > > > The current flow of message is as below: > > > > Once we connect with System-B and have persistence connection (single > > session), System-B will send us message which we have to process in our > > server and then send processed message to System-A then get response from > > System-A and then pass it back to System-B > > > > > > > > We have provision that if load increases we can have multiple instances > of > > System-A and our server can establish persistence connection (single > > session) with each of these System-A instances and manage the load. > > > > > > > > We are facing problem with load coming from System-B to our server as it > is > > coming on single session and we could see that the read/write on the > > session > > are slowed down and lot of queue build-up is happening for read/write. > > > > > > > > Below is the code for establishing the Connectivity with System-B where > we > > have not added the ExecutorFilter > > > > > > > > SocketAddress socketAddress = new InetSocketAddress(this.hostName, > > this.port); > > > > NioSocketConnector connector = new NioSocketConnector(); > > > > connector.setConnectTimeoutMillis(30 * 1000L); > > > > connector.getSessionConfig().setTcpNoDelay(true); > > > > > > > connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,this.echoTime) > > ; > > > > this.connector.setHandler(systemBHandler); // systemBHandler is our > > IoHandler implementationfor System-B > > > > IoFilter codecFilter = new > > ProtocolCodecFilter((ProtocolCodecFactory)systemBProcFactory);// > > systemBProcFactory is our Codec Implementation > > > > DefaultIoFilterChainBuilder chain = this.connector.getFilterChain(); > > > > chain.clear(); > > > > chain.addLast("codec", codecFilter); > > > > > > > > > https://cwiki.apache.org/confluence/display/MINA/Configuring+Thread+Model > > > > > > From this link we could understand as below > > > > > > > > If We didn't add any ExecutorFilter events are forwarded to an IoHandler > > via > > method invocations. This means your business logic in your IoHandler > > implementation will run in the I/O processor thread. We call this thread > > model a 'single thread model'. The single thread model is known to be > > adequate for low-latency network applications with CPU-bound business > logic > > (e.g. game servers). > > > > > > > > Do we need to add the ExecutorFilter for above mentioned > NioSocketConnector > > to System-B so that I/O processor thread will only do the I/O job and all > > other business logic will be given to worker threads in ExecutorFilter. > > > > > > > > Is there any way to increase the number of threads for my I/O to do the > > read/write as we have restriction to create only one session with > System-B. > > > > > > > > If we add ExecutorFilter with IoEventType for read/write then will that > > make the read/write faster with System-B on same single session. > > > > > > > > Or we add ExecutorFilter with default IoEventType (All Events) will that > > make the read/write faster with System-B on same single session. > > > > > > > > Pls help us understand the working on ExecutorFilter in above scenario > > where > > NioSocketConnector has only single session to do all the read/write with > > huge load of almost 60-70 messages per second with average message size > of > > 3-4KiloBytes. > > > > > > > > Currently we have server having 16 Core with 64 GB RAM. > > > > > > > > Thanks And Regards, > > > > Nitin Phuria > > > > > > > > Confidentiality Disclaimer: "The information contained in this electronic > > message (email) and any attachments to this email are intended for the > > exclusive use of the addressee(s) and access to this email by anyone else > > is > > unauthorized. The email may contain proprietary, confidential or > privileged > > information or information relating to Integra Group. If you are not the > > intended recipient, please notify the sender by telephone, fax, or return > > email and delete this communication and any attachments thereto, > > immediately > > from your computer. Any dissemination, distribution, or copying of this > > communication and the attachments thereto (in whole or part), in any > > manner, > > is strictly prohibited and actionable at law. The recipient acknowledges > > that emails are susceptible to alteration and their integrity cannot be > > guaranteed and that Company does not guarantee that any e-mail is > > virus-free > > and accept no liability for any damage caused by any virus transmitted by > > this email." > > > > > > -- > > *Confidentiality Disclaimer**: "The information contained in this > > electronic message > > (email) and any attachments to this email are intended > > for the exclusive use of > > the addressee(s) and access to this email by > > anyone else is unauthorized. The > > email may contain proprietary, > > confidential or privileged information or > > information relating to Integra > > Group. If you are not the intended recipient, > > please notify the sender by > > telephone, fax, or return email and delete this > > communication and any > > attachments thereto, immediately from your computer. Any > > dissemination, > > distribution, or copying of this communication and the > > attachments thereto > > (in whole or part), in any manner, is strictly prohibited > > and actionable at > > law. The recipient acknowledges that emails are susceptible > > to alteration > > and their integrity cannot be guaranteed and that Company does > > not > > guarantee that any e-mail is virus-free and accept no liability for any > > > > damage caused by any virus transmitted by this email."* > > > -- > > CONFIDENTIALITY NOTICE: The contents of this email message and any > attachments are intended solely for the addressee(s) and may contain > confidential and/or privileged information and may be legally protected > from disclosure. > > > -- > *Confidentiality Disclaimer**: “The information contained in this > electronic message > (email) and any attachments to this email are intended > for the exclusive use of > the addressee(s) and access to this email by > anyone else is unauthorized. The > email may contain proprietary, > confidential or privileged information or > information relating to Integra > Group. If you are not the intended recipient, > please notify the sender by > telephone, fax, or return email and delete this > communication and any > attachments thereto, immediately from your computer. Any > dissemination, > distribution, or copying of this communication and the > attachments thereto > (in whole or part), in any manner, is strictly prohibited > and actionable at > law. The recipient acknowledges that emails are susceptible > to alteration > and their integrity cannot be guaranteed and that Company does > not > guarantee that any e-mail is virus-free and accept no liability for any > > damage caused by any virus transmitted by this email.”* > > -- > > > > CONFIDENTIALITY NOTICE: The contents of this email message and any > attachments are intended solely for the addressee(s) and may > contain confidential and/or privileged information and may be legally > protected from disclosure. > > > *Confidentiality Disclaimer**: “The information contained in this > electronic message (email) and any attachments to this email are intended > for the exclusive use of the addressee(s) and access to this email by > anyone else is unauthorized. The email may contain proprietary, > confidential or privileged information or information relating to Integra > Group. If you are not the intended recipient, please notify the sender by > telephone, fax, or return email and delete this communication and any > attachments thereto, immediately from your computer. Any dissemination, > distribution, or copying of this communication and the attachments thereto > (in whole or part), in any manner, is strictly prohibited and actionable at > law. The recipient acknowledges that emails are susceptible to alteration > and their integrity cannot be guaranteed and that Company does not > guarantee that any e-mail is virus-free and accept no liability for any > damage caused by any virus transmitted by this email.”* > > -- > > > > CONFIDENTIALITY NOTICE: The contents of this email message and any > attachments are intended solely for the addressee(s) and may > contain confidential and/or privileged information and may be legally > protected from disclosure. > > > *Confidentiality Disclaimer**: “The information contained in this > electronic message (email) and any attachments to this email are intended > for the exclusive use of the addressee(s) and access to this email by > anyone else is unauthorized. The email may contain proprietary, > confidential or privileged information or information relating to Integra > Group. If you are not the intended recipient, please notify the sender by > telephone, fax, or return email and delete this communication and any > attachments thereto, immediately from your computer. Any dissemination, > distribution, or copying of this communication and the attachments thereto > (in whole or part), in any manner, is strictly prohibited and actionable at > law. The recipient acknowledges that emails are susceptible to alteration > and their integrity cannot be guaranteed and that Company does not > guarantee that any e-mail is virus-free and accept no liability for any > damage caused by any virus transmitted by this email.”* > > -- > > > > CONFIDENTIALITY NOTICE: The contents of this email message and any > attachments are intended solely for the addressee(s) and may > contain confidential and/or privileged information and may be legally > protected from disclosure. > > *Confidentiality Disclaimer**: “The information contained in this > electronic message (email) and any attachments to this email are intended > for the exclusive use of the addressee(s) and access to this email by > anyone else is unauthorized. The email may contain proprietary, > confidential or privileged information or information relating to Integra > Group. If you are not the intended recipient, please notify the sender by > telephone, fax, or return email and delete this communication and any > attachments thereto, immediately from your computer. Any dissemination, > distribution, or copying of this communication and the attachments thereto > (in whole or part), in any manner, is strictly prohibited and actionable at > law. The recipient acknowledges that emails are susceptible to alteration > and their integrity cannot be guaranteed and that Company does not > guarantee that any e-mail is virus-free and accept no liability for any > damage caused by any virus transmitted by this email.”* -- CONFIDENTIALITY NOTICE: The contents of this email message and any attachments are intended solely for the addressee(s) and may contain confidential and/or privileged information and may be legally protected from disclosure.