Arval SQLException: FATAL: désolé, trop de clients déjà dans postgres
Je suis en utilisant une base de données dans PostgreSQL 9.1,l'entrée sur le territoire sont à venir en continu à partir d'un autre programme . Je suis de l'envoi de la demande de l'Ajax après 6 s pour aller chercher la dernière entrée.tomcat fenêtre de sortie montre d'exception---
Arval SQLException: FATAL: sorry, too many clients already
et le programme fonctionne correctement aussi après cela.
Quand je vérifie mon postgres avec query---
select count(*) from pg_stat_activity;
il montre que la connexion sont en constante augmentation, mais j'ai fermer la connexion après chaque demande.Je suis à l'aide de netbeans et struts 1.3.
long previousSNO = Long.parseLong(request.getParameter("previousSNO"));
if(previousSNO == 0)
{
sb.append("SELECT sno,search_type,search_value,search_date FROM log_temp ORDER BY search_date DESC LIMIT 20");
prest = cb.executeSQLQuery(sb.toString());
rs = prest.executeQuery();
}
else
{
sb.append("SELECT sno,search_type,search_value,search_date FROM log_temp WHERE sno > ? ORDER BY search_date DESC");
prest = cb.executeSQLQuery(sb.toString());
prest.setLong(1, previousSNO);
rs = prest.executeQuery();
}
rs.last();
int c = rs.getRow();
rs.beforeFirst();
if(rs!=null && c>0)
{
//code for making json resultsb from resultset here
rs.close();
}
cb.closeConnection();
response.setContentType("text/plain");
response.getWriter().print(resultsb.toString());
//et proche de la méthode dans le cadre de haricot est
public void closeConnection() {
try {
//st.close();
conn.close();
System.out.println("con is closed");
conn = null;
} catch (SQLException e) {
e.getMessage();
System.out.println(e.getMessage());
System.out.println("con is not closed");
}
}
À chaque fois son impression sur console "con est fermée";
Sonne comme il y est une fuite de ressources ailleurs.
je suppose que c'est un plus descriptif répondre à stackoverflow.com/a/32584211/1531476
je suppose que c'est un plus descriptif répondre à stackoverflow.com/a/32584211/1531476
OriginalL'auteur vikas malik | 2012-03-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez augmentation de la max_connections dans postgres, qui n'est pas la solution. Vous avez les ressources des fuites. Il pourrait être n'importe quelle connexion n'est pas fermée, le jeu de résultats n'est pas fermée. Veuillez revenir en arrière et vérifier le code.
Envisager d'utiliser un pool de connexion de la bibliothèque comme c3p0/BoneCp
Une discussion générale sur le regroupement de connexions est ici
(Merci à @sinisa229 mihajlovski)
Je suis d'effectuer une nouvelle connexion pour chaque appel et fermé, mais je pense que Postgres n'est pas de détruire que de connexion. J'ai mis de limite de connexion à 100.
malik: j'en doute. S'il vous plaît poster résultat de select * from pg_stat_activity; Il montrera la requête en cours, pourrait donner une indication sur où la fuite se passe.
Jayan j'ai vérifié.Dans le courant de champ de requête de l'entrée est de la <IDLE> 99 fois. Avant 99 connexion qu'il n'affiche pas d'erreur mais après cela, il montrer l'erreur. Après 6sec il y a une nouvelle entrée dans pg_stat_activity.
veuillez ajouter le code correspondant à la question. Nous utilisons postgresql , je suis sûr qu'il n'a pas trivial de bugs.
OriginalL'auteur Jayan
Pour augmenter la limite de connexion vous pouvez, comme le document suivant.
Cette solution est testée sur ubuntu 12.04.
1. Faire les changements suivants dans postgresql.fichier conf :
Ouvrir
/etc/postgresql/9.1/main/postgresql.conf
Référence: shared_buffers taille doit être inférieure à shmmax taille.
2. Commandes pour vérifier shmmax:
Référence: Réglage de shmmax et shmall
3. Augmenter la taille de shmmax:
Exécutez la commande suivante:
et écrire sur le dessus, en
/etc/sysctl.conf
fichier:Référence : SHMMAX dans Ubuntu
4. Redémarrer postgresql
Liens:
http://www.varlena.com/GeneralBits/Tidbits/perf.html
http://www.postgresql.org/docs/9.1/static/runtime-config-resource.html
OriginalL'auteur Sachin M Sharma