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
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
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