apaches dbcp und threads

Status
Nicht offen für weitere Antworten.
T

threadman

Gast
ich habe mal testen wollen, wie gut das mit dem pool so funktioniert und habe dabei festgestellt, dass bei sehr vielen thread (ab 50), die alle ne ganze reihe von aktionen ausführen, es zu problemen kommt
und zwar wird gemeldet:

org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
und
java.sql.SQLException: Connection is closed.

die funktion, die die verbindungen verteilt hat ein synchronized, so dass ich nicht verstehe, wie es da
zu problemen mit schon geschlossenen verbindungen kommen kann

Code:
public static synchronized Connection createConnection() {
		   
		try {
						
			con =  pds.getConnection();
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		catch (Exception e) {
			
			e.printStackTrace();
		}
		return con;
	  }
Code:
meine einstellungen
connector.getGenObjectPool().setMaxActive(30);
		connector.getGenObjectPool().setMaxIdle(10);
		connector.getGenObjectPool().setMinIdle(9);
		connector.getGenObjectPool().setMaxWait(-1);

im mom habe ich 2 möglichkeiten ohne fehler da druch zu kommen
1. sleep zwischen dem ausführen der transaktionen
ich vermute, dadurch verringert sich die wahrscheinlichkeit, dass 2 threads eine connection haben, was aber nicht sein darf, wegen dem synchronized

aber mal ehrlich, wenn ich nicht nen paar threads nutzen darf, wozu dann überhaupt nen pool?
2. setMaxActive auf unter 20 setzen, dann kommt es auch nie zu problemen
 
M

maki

Gast
Die Fehlermeldung ist von der DB.

Wieviele Connections erlaubt dir postgreSQL laut Konfiguration?
Könnte es sein dass weniger als 30 zugelassen sind?
 
T

threadman

Gast
maki hat gesagt.:
Die Fehlermeldung ist von der DB.

Wieviele Connections erlaubt dir postgreSQL laut Konfiguration?
Könnte es sein dass weniger als 30 zugelassen sind?

max_connections = 100 # (change requires restart)

das sollte also nicht das problem sein
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben