util unable too tenemos sorry siento psqlexception postgres org max_connections many fatal demasiados conf clients clientes already java sql postgresql jdbc

java - unable - org.postgresql.util.PSQLException: FATAL: lo siento, demasiados clientes ya



too many connections postgresql (6)

Estoy tratando de conectarme a una base de datos Postgresql, obtengo el siguiente error:

Error: org.postgresql.util.PSQLException: FATAL: lo siento, demasiados clientes ya

¿Qué significa el error y cómo lo soluciono?

Mi archivo server.properties es el siguiente:

serverPortData=9042 serverPortCommand=9078 trackConnectionURL=jdbc:postgresql://127.0.0.1:5432/vTrack?user=postgres password=postgres dst=1 DatabaseName=vTrack ServerName=127.0.0.1 User=postgres Password=admin MaxConnections=90 InitialConnections=80 PoolSize=100 MaxPoolSize=100 KeepAliveTime=100 TrackPoolSize=120 TrackMaxPoolSize=120 TrackKeepAliveTime=100 PortNumber=5432 Logging=1


Una explicación del siguiente error:

org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.

Resumen:

Abrió más que el límite permitido de conexiones a la base de datos. Usted ejecutó algo como esto: Connection conn = myconn.Open(); dentro de un bucle, y se olvidó de ejecutar conn.close(); . El hecho de que su clase sea destruida y que la basura recolectada no libere la conexión a la base de datos. La solución más rápida para esto es asegurarse de tener el siguiente código con la clase que crea una conexión:

protected void finalize() throws Throwable { try { your_connection.close(); } catch (SQLException e) { e.printStackTrace(); } super.finalize(); }

Coloque ese código en cualquier clase donde cree una conexión. Luego, cuando su clase sea recogida de basura, su conexión será liberada.

Ejecute este SQL para ver las conexiones máximas de postgresql permitidas:

show max_connections;

El valor predeterminado es 100. PostgreSQL en un buen hardware puede admitir unos cientos de conexiones a la vez. Si desea tener miles, debe considerar usar software de agrupación de conexiones para reducir la sobrecarga de la conexión.

Mire exactamente quién / qué / cuándo / dónde está manteniendo abiertas sus conexiones:

SELECT * FROM pg_stat_activity;

La cantidad de conexiones utilizadas actualmente es:

SELECT COUNT(*) from pg_stat_activity;

Estrategia de depuración

  1. Podría dar diferentes nombres de usuario / contraseñas a los programas que podrían no estar liberando las conexiones para descubrir cuál es, y luego buscar en pg_stat_activity para descubrir cuál no está limpiando después de sí mismo.

  2. Realice un seguimiento completo de la pila de excepciones cuando no se puedan crear las conexiones y siga el código hasta donde cree una nueva Connection , asegúrese de que cada línea de código donde cree una conexión finalice con una connection.close();

Cómo configurar las max_connections más arriba:

max_connections en postgresql.conf establece el número máximo de conexiones simultáneas al servidor de la base de datos.

  1. Primero encuentra tu archivo postgresql.conf
  2. Si no sabe dónde está, consulte la base de datos con sql: SHOW config_file;
  3. El mío está en: /var/lib/pgsql/data/postgresql.conf
  4. Inicie sesión como root y edite ese archivo.
  5. Busque la cadena: "max_connections".
  6. Verá una línea que dice max_connections=100 .
  7. Establezca ese número más grande, verifique el límite para su versión de postgresql.
  8. Reinicie la base de datos postgresql para que los cambios surtan efecto.

¿Cuál es el máximo de max_connections?

Use esta consulta:

select min_val, max_val from pg_settings where name=''max_connections'';

Obtengo el valor 8388607 , que en teoría es lo máximo que se te permite tener, pero luego un proceso descontrolado puede devorar miles de conexiones, y sorprende que tu base de datos no responda hasta que se reinicie. Si tuviera un max_connections sensible como 100. Al programa ofensor se le negaría una nueva conexión.


Las líneas ofensivas son las siguientes:

MaxConnections=90 InitialConnections=80

Puede aumentar los valores para permitir más conexiones.


No es necesario aumentar las MaxConnections & InitialConnections. Simplemente cierre sus conexiones después de hacer su trabajo. Por ejemplo, si está creando una conexión:

try { connection = DriverManager.getConnection( "jdbc:postgresql://127.0.0.1/"+dbname,user,pass); } catch (SQLException e) { e.printStackTrace(); return; }

Después de hacer tu trabajo cerca de la conexión:

try { connection.commit(); connection.close(); } catch (SQLException e) { e.printStackTrace(); }


No sabemos qué archivo server.properties es ese, ni sabemos qué significa SimocoPoolSize (¿verdad?)

Supongamos que está utilizando un grupo personalizado de conexiones de bases de datos. Entonces, supongo que el problema es que su grupo está configurado para abrir 100 o 120 conexiones, pero su servidor Postgresql está configurado para aceptar MaxConnections=90 . Estos parecen configuraciones conflictivas. Intente aumentar MaxConnections=120 .

Pero primero debe comprender la infraestructura de su capa de db, saber qué grupo está utilizando, si realmente necesita tantas conexiones abiertas en la agrupación. Y, especialmente, si está devolviendo con gracia las conexiones abiertas al grupo


Por ejemplo, debe cerrar todas sus conexiones: si realiza una declaración INSERT INTO, debe cerrar la declaración y su conexión de esta manera:

statement.close(); Connexion.close():

Y si hace una instrucción SELECT, necesita cerrar la declaración, la conexión y el conjunto de resultados de esta manera:

resultset.close(); statement.close(); Connexion.close();

Hice esto y funcionó


1. Verifique la configuración actual

Inicie sesión en PostgreSQL utilizando el comando psql,

postgres=# show max_connections; max_connections ----------------- 100 (1 row)

2. Abra el archivo de configuración de PostgreSQL

vi /var/lib/pgsql/data/postgresql.conf

3. Cambie las siguientes configuraciones predeterminadas según corresponda

max_connections = 100 # (change requires restart) # Note: Increasing max_connections costs ~400 bytes of shared memory per .... shared_buffers = 400MB # min 128kB # (change requires restart)

4. Reinicie el servidor PostgreSQL para aplicar cambios

$:service postgresql restart Stopping postgresql service: [ OK ] Starting postgresql service: [ OK ]

Referencia

http://www.devdummy.com/2017/10/postgresql-psqlexception-fatal-sorry.html