2012-03-21 11 views
8

Sto utilizzando un database in PostgreSQL 9.1, in cui la voce viene continuamente da un altro programma. Sto inviando richiesta Ajax dopo 6 sec per andare a prendere l'ultima finestra di output entry.tomcat mostra eccezione ---Arval SQLException: FATAL: scusate, troppi client già in postgres

Arval SQLException: FATAL: sorry, too many clients already 

e il programma funziona correttamente anche dopo questo. Quando controllo i miei postgres con interrogazione ---

select count(*) from pg_stat_activity; 

mostra che il collegamento è in continuo aumento, ma chiudere la connessione dopo ogni request.I sto usando NetBeans e puntoni 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()); 

// e vicino metodo di fagioli di connessione è

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"); 
    } 
} 

Ogni volta la sua impronta su console "con è chiuso";

+2

Suona come v'è una perdita di risorse da qualche altra parte. –

+1

Suppongo che questa sia una risposta più descrittiva https://stackoverflow.com/a/32584211/1531476 – jANVI

risposta

10

È possibile che increase the max_connections in postgres non sia la soluzione. Hai perdite di risorse. Potrebbe essere qualsiasi - connessione non chiusa, set di risultati non chiuso. Per favore torna indietro e controlla il codice.

considerare l'utilizzo di una libreria di pool di connessioni come c3p0/BoneCp

una discussione generale sulla connection pooling is here (Grazie a @ sinisa229 Mihajlovski)

+0

Dipende anche dal modo in cui le risorse sono gestite, è utile utilizzare il pool di connessioni per riutilizzare le connessioni. Se una nuova connessione viene aperta su ogni chiamata, può ancora causare l'apertura di troppe connessioni. –

+0

Sto facendo una nuova connessione per ogni chiamata e l'ho chiusa ma penso che Postgres non stia distruggendo quella connessione. Ho impostato il limite di connessione a 100. –

+0

@vikas malik: Dubito. Si prega di inviare l'output da select * da pg_stat_activity; Mostrerà la query corrente, potrebbe dare un suggerimento su dove sta avvenendo la perdita. – Jayan

19

Per aumentare limitare la connessione è possibile, come il seguente documento.

Questa soluzione è stata testata su Ubuntu 12.04.

1. Definire le seguenti modifiche nel file postgresql.conf:

Aprire /etc/postgresql/9.1/main/postgresql.conf

max_connections = 200 
shared_buffers = 100MB 
max_files_per_process = 100 

Riferimento: shared_buffers size should be less than shmmax size.

2. I comandi per controllare shmmax:

$ sysctl -e kernel.shmmax 
$ ipcs -l 

Riferimento: Adjusting shmmax and shmall

3. Aumentare la dimensione del shmmax:

Eseguire il seguente comando:

$ sysctl -w kernel.shmmax=134217728 
$ sysctl -w kernel.shmall=2097152 

e scrivere sulla parte superiore in /etc/sysctl.conf di file:

kernel.shmmax=134217728 
kernel.shmall=2097152 

Riferimento: SHMMAX in Ubuntu

4.Riavvia postgresql

$ service postgresql restart 

vicini:

http://www.varlena.com/GeneralBits/Tidbits/perf.html

http://www.postgresql.org/docs/9.1/static/runtime-config-resource.html

+0

Ho impostato i shared_buffers su 10MB sul mio mac – why

Problemi correlati