복붙노트

[SQL] org.postgresql.util.PSQLException : FATAL : 이미 미안 해요, 너무 많은 클라이언트

SQL

org.postgresql.util.PSQLException : FATAL : 이미 미안 해요, 너무 많은 클라이언트

나는 PostgreSQL 데이터베이스에, 나는 다음과 같은 오류를 얻고있다 연결을 시도하고있다 :

어떤 오류 무슨 뜻이며 어떻게 해결합니까?

내 server.properties 파일은 다음과 같습니다

serverPortData=9042
serverPortCommand=9078
trackConnectionURL=jdbc:postgresql://127.0.0.1:5432/vTrack?user=postgres password=postgres
dst=1
DatabaseName=vTrack
ServerName=127.0.0.1
User=postgres
Password=admin
MaxConnections=90
InitialConnections=80
PoolSize=100
MaxPoolSize=100
KeepAliveTime=100
TrackPoolSize=120
TrackMaxPoolSize=120
TrackKeepAliveTime=100
PortNumber=5432
Logging=1

해결법

  1. ==============================

    1.우리는 파일이 해당, 우리는 둘 다 SimocoPoolSize 수단이 무엇인지 모르는 무엇 server.properties 모른다 (당신은?)

    우리는 파일이 해당, 우리는 둘 다 SimocoPoolSize 수단이 무엇인지 모르는 무엇 server.properties 모른다 (당신은?)

    의 당신이 데이터베이스 연결의 일부 사용자 지정 풀을 사용하는 추측 보자. 그럼, 문제가 풀 100 개 또는 120 연결을 열하도록 구성되어 있는지 추측,하지만 당신은 PostgreSQL 서버는의 MaxConnections = 90을 허용하도록 구성되어있다. 이들은 conflictive 설정을 보인다. = 120 증가의 MaxConnections를 사용해보십시오.

    하지만 먼저 당신이 정말로 풀에서 많은 열려있는 연결을 필요로하는 경우 당신이 사용하는 수영장이 무엇인지, 당신의 DB 층 인프라를 이해해야합니다. 그리고, 특별히, 당신은 정상적으로 풀에 열린 연결을 반환하는 경우

  2. ==============================

    2.

    org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.
    

    요약:

    당신은 데이터베이스에 대한 연결의 허용 한계 이상을 열었다. 이 같은 실행 : 연결 CONN = myconn.Open를 (); 루프의 내부 등) (conn.close 실행할 잊었 ;. 그냥 클래스가 파괴 쓰레기 데이터베이스에 대한 연결을 해제하지 않습니다 수집 때문이다. 이에 대한 빠른 수정 프로그램은 연결을 만듭니다 어떤 클래스에 다음 코드를 가지고 있는지 확인하는 것입니다 :

    protected void finalize() throws Throwable  
    {  
        try { your_connection.close(); } 
        catch (SQLException e) { 
            e.printStackTrace();
        }
        super.finalize();  
    }  
    

    당신이 연결을 만들 경우 모든 클래스에 해당 코드를 넣습니다. 클래스 가비지 수집 될 때 다음, 당신의 연결이 해제됩니다.

    허용 PostgreSQL의 최대 연결을 보려면이 SQL을 실행

    show max_connections;
    

    기본값은 좋은 하드웨어 (100) PostgreSQL을 한 번에 몇 백 연결을 지원할 수있다. 당신은 수천하려는 경우, 당신은 오버 헤드 연결을 줄이기 위해 연결 풀링 소프트웨어를 사용하는 것이 좋습니다.

    한 번 봐 정확히 누구 / 무엇을 / 어디에 연결을 열고 보유시 / :

    SELECT * FROM pg_stat_activity;
    

    현재 사용되는 연결 수는 다음과 같습니다

    SELECT COUNT(*) from pg_stat_activity;
    

    디버깅 전략

    어떻게 높은 MAX_CONNECTIONS을 설정하는 방법 :

    는 postgresql.conf에서 MAX_CONNECTIONS는 데이터베이스 서버에 동시 연결의 최대 수를 설정합니다.

    최대의 MAX_CONNECTIONS은 무엇입니까?

    이 쿼리를 사용합니다 :

    select min_val, max_val from pg_settings where name='max_connections';
    

    내가 가장 당신이 할 수 있습니다의 이론에 값 8388607를 얻을 수 있지만, 다음 폭주 프로세스가 수천 개의 연결을 먹을 수 있고, 놀라운, 데이터베이스는 다시 부팅 할 때까지 응답하지 않습니다. 당신이 100처럼 분별 MAX_CONNECTIONS이 있다면 문제를 일으키는 프로그램은 새로운 연결을 거부 될 것입니다.

  3. ==============================

    3.필요는의 MaxConnections & InitialConnections을 증가 없습니다. 그냥 일을 한 후 후 연결을 닫습니다. 예를 들어, 당신은 연결을 작성하는 경우 :

    필요는의 MaxConnections & InitialConnections을 증가 없습니다. 그냥 일을 한 후 후 연결을 닫습니다. 예를 들어, 당신은 연결을 작성하는 경우 :

    try {
         connection = DriverManager.getConnection(
                        "jdbc:postgresql://127.0.0.1/"+dbname,user,pass);
    
       } catch (SQLException e) {
        e.printStackTrace();
        return;
    }
    

    작업 가까운 연결을 수행 한 후 :

    try {
        connection.commit();
        connection.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  4. ==============================

    4.잘못된 줄은 다음과 같다 :

    잘못된 줄은 다음과 같다 :

    MaxConnections=90
    InitialConnections=80
    

    당신은 더 많은 연결을 허용하도록 값을 증가시킬 수있다.

  5. ==============================

    5.당신은 예를 들어 모든 CONNEXIONS을 닫아야합니다 : 당신은 INSERT INTO 문을 만들 경우이 방법으로 진술하고 접속을 종료해야합니다

    당신은 예를 들어 모든 CONNEXIONS을 닫아야합니다 : 당신은 INSERT INTO 문을 만들 경우이 방법으로 진술하고 접속을 종료해야합니다

    statement.close();
    Connexion.close():
    

    당신이 SELECT 문을 만들 경우 그리고 당신은 문의 접속이 방법으로 결과 집합을 닫아야합니다 :

    resultset.close();
    statement.close();
    Connexion.close();
    

    나는 이런 짓을하고 일했다

  6. from https://stackoverflow.com/questions/2757549/org-postgresql-util-psqlexception-fatal-sorry-too-many-clients-already by cc-by-sa and MIT license