Почему процессор на Ubuntu грузится на 100%?

252
28 марта 2018, 04:58

Здравствуйте. Запускаю консольное приложение (Java) на Ubuntu через программу Putty командой nohup java -jar "App.jar"> /dev/null &, и через какое-то время процессор начинает грузиться на 100%. Приложение легковесное. Из-за чего это может быть?

Добавил код.Пожалуйста помогите с оптимизацией.

Главный Класс (запускающий поток с новым сокетом) :

public class MainSocket {
    public static void main(String[] args) throws IOException {
        HashMap<String,SecondSocket> hashMap = new HashMap();
        ServerSocket serverSocket = new ServerSocket(5555);
        BufferedReader bufferedReader = null;
        PrintWriter printWriter = null;
        String clientKey = null;
        while(true){
            System.out.println("Ожидание нового подключения...");
            Socket socket = serverSocket.accept();
            System.out.println("Старт");
            try
            {
                 printWriter = new PrintWriter(socket.getOutputStream(),true);
                 bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), Charset.forName("cp1251")));
                 clientKey = bufferedReader.readLine();
                System.out.println("key ot klienta"+clientKey);
            }catch (Exception e){}
            //Когда есть новое подключение запускаю новый поток для работы с ним
            if(hashMap.size()!=0){
                    if(hashMap.get(clientKey)!=null){
                        SecondSocket mySocketThread = hashMap.get(clientKey);
                        mySocketThread.setSocket(socket);
                        mySocketThread.setBufferedReader(bufferedReader);
                        mySocketThread.setPrintWriter(printWriter);
                        printWriter.println("ваш поток найден");
                    }else{
                        printWriter.println("для вас создан новый поток");
                        SecondSocket mySocketThread = new SecondSocket(socket,bufferedReader,printWriter);
                        hashMap.put(clientKey,mySocketThread);
                        mySocketThread.start();
                    }
            }else{
                printWriter.println("для вас создан новый поток");
                SecondSocket mySocketThread = new SecondSocket(socket,bufferedReader,printWriter);
                hashMap.put(clientKey, mySocketThread);
                mySocketThread.start();
            }
            System.out.println("OBSHEE CHISLO POTOKOV : "+hashMap.size());
        }
    }
}

Класс поток :

class SecondSocket extends Thread{
    String connectionUrl = "jdbc:sqlserver://127.0.0.1;databaseName=mydb;user=myname;password=pass";
    Connection connection = null;
    CallableStatement cstmt = null;
    String userId = null;
    String xml = null;
    Document document = null;
    Elements xmlTag = null;
    Element e = null;
    BufferedReader bufferedReader = null;
    PrintWriter printWriter = null;
    Socket socket = null;
    public SecondSocket(Socket socket,BufferedReader bufferedReader,PrintWriter printWriter){
        this.socket = socket;
        this.bufferedReader = bufferedReader;
        this.printWriter = printWriter;
        try {
            connection = DriverManager.getConnection(connectionUrl);
        }catch(Exception e){
            try {
                connection.rollback();
            } catch (SQLException e1) {
            }
        }
        try {
            xml = bufferedReader.readLine();
            System.out.println(xml);
        } catch (IOException e1) {
        }
        try {
            cstmt = connection.prepareCall("{call xml_parser(?,?)}");
            cstmt.setString(1, xml);
            cstmt.registerOutParameter(2, Types.VARCHAR);
            cstmt.execute();
            document = Jsoup.parse(cstmt.getString(2));
            xmlTag = document.getElementsByTag("codeid");
            try{
                e = xmlTag.get(0);
                userId = e.text();
            }catch (Exception e){}
        } catch (Exception e) {
        }
    }
    @Override
    public void run() {
        while(true){
            while(socket!=null){
                if(userId!=null){
                    try {
                        cstmt = connection.prepareCall("{call xml_parser_new(?,?)}");
                        cstmt.setInt(1, Integer.valueOf(userId));
                        cstmt.registerOutParameter(2, Types.INTEGER);
                        cstmt.execute();
                        printWriter.println(cstmt.getString(2));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    try{
                        while ((xml = bufferedReader.readLine()) != null) {
                            System.out.println(xml);
                            cstmt.execute();
                            if (cstmt.getString(2).equals("1")) {
                                printWriter.println(cstmt.getString(2));
                            }else {
                                printWriter.println("0");
                            }
                        }
                    }catch(IOException e){
                    } catch (SQLException e1) {
                    } finally {
                        try {
                            cstmt.close();
                            socket.close();
                            socket = null;
                            xml = "";
                            e = null;
                            xmlTag = null;
                            document = null;
                            bufferedReader.close();
                            bufferedReader = null;
                            printWriter.close();
                            printWriter = null;
                            System.out.println("сработал finally block");
                        } catch (SQLException e1) {
                        } catch (IOException e1) {
                        }
                    }
                }
                System.out.println("сработал конечный while");
            }
            System.out.println("Работает while true");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e1) {
            }
        }
    }
    public BufferedReader getBufferedReader() {
        return bufferedReader;
    }
    public void setBufferedReader(BufferedReader bufferedReader) {
        this.bufferedReader = bufferedReader;
    }
    public PrintWriter getPrintWriter() {
        return printWriter;
    }
    public void setPrintWriter(PrintWriter printWriter) {
        this.printWriter = printWriter;
    }
    public Socket getSocket() {
        return socket;
    }
    public void setSocket(Socket socket) {
        this.socket = socket;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof SecondSocket)) return false;
        SecondSocket that = (SecondSocket) o;
        if (bufferedReader != null ? !bufferedReader.equals(that.bufferedReader) : that.bufferedReader != null)
            return false;
        if (connection != null ? !connection.equals(that.connection) : that.connection != null) return false;
        if (connectionUrl != null ? !connectionUrl.equals(that.connectionUrl) : that.connectionUrl != null)
            return false;
        if (cstmt != null ? !cstmt.equals(that.cstmt) : that.cstmt != null) return false;
        if (document != null ? !document.equals(that.document) : that.document != null) return false;
        if (e != null ? !e.equals(that.e) : that.e != null) return false;
        if (xml != null ? !xml.equals(that.xml) : that.xml != null) return false;
        if (printWriter != null ? !printWriter.equals(that.printWriter) : that.printWriter != null) return false;
        if (socket != null ? !socket.equals(that.socket) : that.socket != null) return false;
        if (userId != null ? !userId.equals(that.userId) : that.userId != null) return false;
        if (xmlTag != null ? !xmlTag.equals(that.xmlTag) : that.xmlTag != null) return false;
        return true;
    }
    @Override
    public int hashCode() {
        int result = connectionUrl != null ? connectionUrl.hashCode() : 0;
        result = 31 * result + (connection != null ? connection.hashCode() : 0);
        result = 31 * result + (cstmt != null ? cstmt.hashCode() : 0);
        result = 31 * result + (userId != null ? userId.hashCode() : 0);
        result = 31 * result + (xml != null ? xml.hashCode() : 0);
        result = 31 * result + (document != null ? document.hashCode() : 0);
        result = 31 * result + (xmlTag != null ? xmlTag.hashCode() : 0);
        result = 31 * result + (e != null ? e.hashCode() : 0);
        result = 31 * result + (bufferedReader != null ? bufferedReader.hashCode() : 0);
        result = 31 * result + (printWriter != null ? printWriter.hashCode() : 0);
        result = 31 * result + (socket != null ? socket.hashCode() : 0);
        return result;
    }
}
READ ALSO
Когда можно использовать scope runtime

Когда можно использовать scope runtime

В каких случаях может понадобиться добавлять такую область для зависимости? Что то не могу представить чтобы либа нужна была только в рантайме...

235
Не нажимается ImageButton после анимации

Не нажимается ImageButton после анимации

Вем приветРазрабатываю игру пазл на подобие пятнашек

160
Бизнес-логика и ее реализация

Бизнес-логика и ее реализация

Вначале про бизнес-логикуЕсть идея программы, часть функций уже реализована, структура (как на картинке) уже создана

201
Получение данных из Firebase

Получение данных из Firebase

Хочу получить данные из своей базы данных в Firebase, а точнее поле Имя Моя база имеет такую структуру:

162