coderZoe commented on issue #518:
URL: https://github.com/apache/mina-sshd/issues/518#issuecomment-2172226499

   well,I have discovered another issue: there is a memory leak when 
reconnecting the client. Here is an example:
   
   I register a listener for each session to monitor if the session 
disconnects. Once it disconnects, I attempt to reconnect proactively.
   
   ```java
   this.session.addSessionListener(new SessionListener() {
       @Override
       public void sessionClosed(Session session) {
           synchronized (BaseSshSessionSender.this){
               if(BaseSshSessionSender.this.status != SenderStatus.DISCONNECT 
&& BaseSshSessionSender.this.status != SenderStatus.DEATH){
                   BaseSshSessionSender.this.status = SenderStatus.DISCONNECT;
                   BaseSshSessionSender.this.reConnect(true);
               }
           }
       }
   });
   ```
   
   ```java
   protected void reConnect(boolean immediately){
       this.scheduledExecutorService.schedule(this::connect, 
immediately?0L:metaData.getReconnectInterval().getSeconds(), TimeUnit.SECONDS);
   }
   
   public void connect() {
       try {
           if(this.status != SenderStatus.DEATH){
               this.doConnect();
           }
       } catch (Exception e) {
           this.status = SenderStatus.DISCONNECT;
           this.reConnect(false);
       }
   }
   ```
   
   Assuming each client currently uses `cpu*2` threads, a reconnection will use 
a new client, which creates another `cpu*2` threads. However, the previously 
created `cpu*2` threads for the client are not reclaimed. This means each 
reconnection increases the number of threads by `cpu*2`, causing the total 
number of threads to keep growing.
   
   I tested this with Jprofiler, and found that at service startup, there were 
around 1200 sshd threads, but after about 5 minutes, there were nearly 2000 
threads (because I intentionally connected some clients to unreachable 
networks, triggering reconnections). This situation clearly leads to a memory 
leak. How can this be resolved?
   
   Thank you for your assistance.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to