Limite de conexões MySQL?

3 respostas
javamysql
R

Olá, Dev’s!

Estou com um problema, que está ocorrendo a cada 15 minutos mais ou menos, e o programa fecha direto.

Estou recebendo este erro:

Erro MySQL: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).

Aparentemente, é um erro causado por um limitador no número de sockets, porém, nas configs do MySQl, o número de conexões simultâneas estão ilimitadas, está tudo ilimitado, não era para ter limite, creio eu.

Alguém sabe o que pode ser?

Gratidão.

3 Respostas

R

NÃO DEIXE ILIMITADO!!. Isso pode causar problemas em questão de perfomance.

Ao invés de deixar sem limite, tente fechar todo tipo de conexão após fazer alguma consulta, exemplo:

private ConectaBanco conecta = new ConectaBanco();

private void getNome(){
    try {
        conecta.conexao();
        /*
            ................
            Sua lógica aqui
            ................
         */
    } catch (Exception ex){
        System.out.println(ex);
    } finally {
        conecta.desconecta();
    }
}
L

Faça como indicado pelo @rodriguesabner que vc não terá problemas.

Para cada conexão aberta, um recurso do servidor é usado. Se são abertas mais conexões do que o servidor consegue suportar, irá ocorrer travamentos na aplicação e até mesmo no banco de dados. É a mesma ideia de vc abrir vários programas pesados na sua máquina e ela ter pouca memória ram, por exemplo.

R

Pessoal, boa noite!

Agradeço muito pela ajuda!

Mas então, eu já faço isto, a não ser que esteja fazendo algo errado.
Em todos os códigos em que eu utilizo essa parte de conexão via MySQL utilizo o mesmo código:

Connection con = Main.sql.getConnection();
ResultSet rs = null;
PreparedStatement ps = null;
try {
    //Código aqui
} catch (SQLException ex) {
    Main.log.erro("Caixa", "carregarPagamentos", ex.getMessage(), true);
} finally {
    Main.sql.closeConnection(con, ps, rs);
}

Método getConnection:

public static Connection getConnection() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        return DriverManager.getConnection("jdbc:mysql://" + host + ":3306/" + database, usuario, senha);
    } catch (ClassNotFoundException | SQLException ex) {
        JOptionPane.showMessageDialog(null, "Não foi possível se conectar ao banco de dados!\nVerifique se o WampServer esteja ligado!\nErro: " + ex.getMessage());
        System.out.println("Erro MySQL: " + ex.getMessage());
        System.exit(0);
    }
    return null;
}

Método closeConnection:

public static void closeConnection(Connection con) {
    try {
        if (con != null) {
            con.close();
        }
    } catch (SQLException e) {
    }
}

public static void closeConnection(Connection con, PreparedStatement ps) {
    closeConnection(con);
    try {
        if (ps != null) {
            ps.close();
        }
    } catch (SQLException e) {
    }
}

public static void closeConnection(Connection con, PreparedStatement ps, ResultSet rs) {
        closeConnection(con, ps);
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
        }
    }
Criado 17 de julho de 2021
Ultima resposta 17 de jul. de 2021
Respostas 3
Participantes 3