[SQL] org.postgresql.util.PSQLException : FATAL : 이미 미안 해요, 너무 많은 클라이언트
SQLorg.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.우리는 파일이 해당, 우리는 둘 다 SimocoPoolSize 수단이 무엇인지 모르는 무엇 server.properties 모른다 (당신은?)
우리는 파일이 해당, 우리는 둘 다 SimocoPoolSize 수단이 무엇인지 모르는 무엇 server.properties 모른다 (당신은?)
의 당신이 데이터베이스 연결의 일부 사용자 지정 풀을 사용하는 추측 보자. 그럼, 문제가 풀 100 개 또는 120 연결을 열하도록 구성되어 있는지 추측,하지만 당신은 PostgreSQL 서버는의 MaxConnections = 90을 허용하도록 구성되어있다. 이들은 conflictive 설정을 보인다. = 120 증가의 MaxConnections를 사용해보십시오.
하지만 먼저 당신이 정말로 풀에서 많은 열려있는 연결을 필요로하는 경우 당신이 사용하는 수영장이 무엇인지, 당신의 DB 층 인프라를 이해해야합니다. 그리고, 특별히, 당신은 정상적으로 풀에 열린 연결을 반환하는 경우
-
==============================
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.필요는의 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.잘못된 줄은 다음과 같다 :
잘못된 줄은 다음과 같다 :
MaxConnections=90 InitialConnections=80
당신은 더 많은 연결을 허용하도록 값을 증가시킬 수있다.
-
==============================
5.당신은 예를 들어 모든 CONNEXIONS을 닫아야합니다 : 당신은 INSERT INTO 문을 만들 경우이 방법으로 진술하고 접속을 종료해야합니다
당신은 예를 들어 모든 CONNEXIONS을 닫아야합니다 : 당신은 INSERT INTO 문을 만들 경우이 방법으로 진술하고 접속을 종료해야합니다
statement.close(); Connexion.close():
당신이 SELECT 문을 만들 경우 그리고 당신은 문의 접속이 방법으로 결과 집합을 닫아야합니다 :
resultset.close(); statement.close(); Connexion.close();
나는 이런 짓을하고 일했다
from https://stackoverflow.com/questions/2757549/org-postgresql-util-psqlexception-fatal-sorry-too-many-clients-already by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오류 떨어 뜨리 데이터베이스 (수 없습니다 RMDIR '.test \'의 errno : 17) (0) | 2020.04.29 |
---|---|
[SQL] 어떻게 결과 케이스를 구분 정렬 문으로 SQL 주문을 사용 하는가? (0) | 2020.04.29 |
[SQL] SQL Server의 역사를 테이블에 역사적 기록을 저장하는 방법 (0) | 2020.04.29 |
[SQL] SQL Server 2008의 매개 변수보기 만들기 (0) | 2020.04.29 |
[SQL] MySQL은 매장 IP 주소에 가장 효율적인 방법 [중복] (0) | 2020.04.29 |