2009-05-21 4 views
2

In unserem Projekt verwenden wir postgresSQL (8.3) als Datenbankserver, aber wir sind selten konfrontiert Problem (einmal). in der Protokolldatei Fehler sehe ichVerbindungsversuch in PostgreSQL-Server fehlgeschlagen

Wie
****Connection attempt failed**** 

bedeutet es für mich, dass die Anwendung versucht, Verbindungsobjekt aus dem DB-Server aber es war erfolglos zu bekommen.

Seltsames ist, wenn ich Datenbankserver oder Webserver (Tomcat) neu starten wird es normal funktionieren. Ich werde diesen Fehler selten erhalten.

+0

Können Sie weitere Informationen zu Ihrer Umgebung bereitstellen, da die Ursache möglicherweise außerhalb von Postgres liegt. –

+0

Ist dieser Fehler im Tomcat-Protokoll? Wenn ja, gibt es eine Ausnahme backtrace? Gibt es irgendwelche Fehler im postgresql-Protokoll um diese Zeit? – araqnid

+0

Benötigen Sie weitere Informationen hierzu. –

Antwort

0

Dies ist in Web-Apps üblich, wenn ein Benutzer die Anfrage abbricht und der Server die Verbindung mitten in der Anfrage beendet. Es hört sich so an, als würde es den Server nicht wirklich stoppen, oder?

1

Hier sind ein paar Dinge, die dies verursachen könnten, ohne weitere Details kann ich nicht mehr sagen.

1. Netzwerkfehler. Es besteht die Möglichkeit, dass ein Teil der Verbindungszeichenfolge nicht an PostgreSQL übergeben wird. Siehe Punkt 2.

2.Die Verbindungszeichenfolge ist beschädigt. Wird die Verbindungszeichenfolge dynamisch erstellt?

3. Problem im Verbindungspool. Dies sollte jedoch einen Fehler in Ihrem Verbindungspool verursachen. Ohne zu wissen, welche Art von Verbindungspool Sie verwenden, kann ich es nicht ausschließen.

1

Möglicherweise überschreiten Sie die maximale Anzahl von Verbindungen. Schauen Sie in postgresql.conf nach dem Parameter max_connections, sein Standardwert ist 100 bei den meisten Builds.

netstat -tn | grep -c 5432 

Sollte Ihnen eine Annäherung der Anzahl der derzeit geöffneten Verbindungen geben.

0

Stellen Sie sicher, dass Sie die Ressourcen (Verbindung, Anweisung, Ergebnismenge) im Block finally schließen, nachdem Sie sie geöffnet haben. Wenn Sie einen Verbindungspool verwenden, stellen Sie auch sicher, dass die maxsize nicht zu hoch eingestellt ist.