Java Sigar огромное использование оперативной памяти - PullRequest
0 голосов
/ 16 мая 2018

Я использую библиотеку Sigar на сервере рабочей станции Linux (dist. Mint).это мой код:

    ConnectionUtils connection = new ConnectionUtils();
    Sigar sigar = new Sigar();
    String query = "";
    connection.openConnection();

    Mem mem;
    CpuPerc cpuperc;
    FileSystemUsage filesystemusage;


    long RAM;
    long CPU;
    long HDD;

    while(true) {

        mem = sigar.getMem();
        cpuperc = sigar.getCpuPerc();
        filesystemusage = sigar.getFileSystemUsage("/");

        RAM  = Math.round(mem.getUsedPercent());
        CPU  = Math.round((cpuperc.getCombined()*100));
        HDD = Integer.valueOf((int) (filesystemusage.getUsePercent()*100));

        query = "UPDATE ServerInfo SET RAM="+RAM+",CPU="+CPU+",HDD="+HDD+" WHERE ServerName=\"XgenVPS\"";
        connection.sendQuery(query);
        System.out.println("informacje sostały pomyśnie wysłane do bazy danych"); 
        Thread.sleep(1000);
    }
}

}

и через несколько часов увеличилось использование оперативной памяти, а после дня сбоя - программа остановила интервал и не отвечала, но не была сброшена с фатальнымошибка.Может кто-нибудь мне помочь?Я хочу, чтобы эта программа работала много дней без ошибок.

о.Это из функций ConnectionUtils:

private Connection conn;

private String host = "localhost";
private String port = "3306";
private String database = "xgen-dashboard";
private String user = "root";
private String pass = "asdzxcasdzxc123";

public ConnectionUtils() {

}

public synchronized void openConnection(){
    if(!isConnected()){
        try{
            conn = DriverManager.getConnection("jdbc:mysql://"+host+":"+port+"/"+database+"?user="+user+"&password="+pass+"&useSSL=false");
        } catch(SQLException e){
            e.printStackTrace();
        }
    }
}

public synchronized void closeConnection(){
    if(isConnected()){
        try{
            conn.close();
        } catch(SQLException e){
            e.printStackTrace();
        }
    }
}

public boolean isConnected() {
    try{
        if(conn == null) return false;
        if(conn.isClosed()) return false;
    } catch(SQLException e){
        e.printStackTrace();
    }
    return true;
}

public ResultSet sendQuery(String query) {
    try {
        return conn.createStatement().executeQuery(query);
    } catch (SQLException e) {
        try {
             conn.createStatement().executeUpdate(query);
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
    return null;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...