socke服务端运行两周后假死,收不到信息,重启后恢复

socke服务端运行两周后假死,收不到信息,重启后恢复,不明白哪里有问题,应该如何修改

package net.huadong.citos.service;

import com.alibaba.fastjson.JSONObject;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Main {
    public static final int port = 9001;

    public static void main(String[] args) throws IOException {

        new HandlerThread();
    }

    private static class HandlerThread implements Runnable {
        private Socket socket;
        ServerSocket serverSocket ;

        public HandlerThread() {
            try {
                serverSocket = new ServerSocket(port);
                System.out.println("serverSocket "+System.currentTimeMillis());
            } catch (IOException e) {
                e.printStackTrace();
            }
            new Thread(this).start();
        }

        @Override
        public void run() {
            while(true) {
                try {
                    socket = serverSocket.accept();
                    System.out.println("serverSocket.accept :"+System.currentTimeMillis());
                    InputStream inputStream = socket.getInputStream();
                    byte[] bytes = new byte[1024];
                    int len = 0;
                    int bytesWritten = 0;
                    StringBuilder sb = new StringBuilder();
                    while ((len = inputStream.read(bytes)) != -1) {
                       
                        sb.append(new String(bytes, 0, len, "GB2312"));
                        bytesWritten += len;
                    }
                    System.out.println("inputStream.read(bytes):"+System.currentTimeMillis());
                    String str = sb.toString();
                    String result = str.substring(38, str.length() - 3);
                    System.out.println(result);

                    dealMessage t = new dealMessage();
                    t.JdbcDemo(result);

                    inputStream.close();
                    socket.close();
                } catch (Exception e) {
                    e.getMessage();
                }
            }
        }
    }

}


有看下程序的内存吗
虽然有垃圾回收机制,但是回收的时间点不一定

img


这些new的东西 是不是可以放到循环外面,内部就不用每次都new一些内存出来了
第二点就是看下假死的时候是不是有大量的close_wait状态的tcp连接,参照
https://cloud.tencent.com/developer/article/1381359