클라이언트 응용 프로그램에서 올바르게 닫히지 않은 PostgreSQL 연결을 어떻게 해제합니까?
다중 프로세스를 회전시키는 데이터 마이닝 앱이 있습니다. 모든 데이터를 로컬 PostgreSQL 9.1 데이터베이스에 연결하여 데이터를 검색합니다. 몇 시간 동안 정상적으로 실행되지만 오류와 함께 사망합니다.
FATAL: remaining connection slots are reserved for non-replication superuser connections
이것을 조사하면 앱이 연결을 제대로 닫지 않았기 때문에 발생했을 가능성이 높습니다. 그러나 앱이 종료 된 경우에도 이러한 연결은 해제되지 않습니다. PostgreSQL이 자동으로 연결을 닫는 일종의 시간 초과가 있습니까?
또한 Postgres의 max_connections를 100에서 200으로 늘리려 고 시도했지만 다시 시작하면 오류가 발생했습니다.
2014-02-23 10:51:15 EST FATAL: could not create shared memory segment: Invalid argument
2014-02-23 10:51:15 EST DETAIL: Failed system call was shmget(key=5432001, size=36954112, 03600).
2014-02-23 10:51:15 EST HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 36954112 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.
내 시스템은 Ubuntu 12.04이며 8GB의 메모리가 있으며 다른 모든 PG 설정이 기본값이므로 시스템에 충분한 메모리가 없다고 생각하는 이유를 모르겠습니다.
그런 다음 pgbouncer를 사용하여 연결을 풀링하고 재사용하려고했습니다. 이것은 조금 더 잘 작동하는 것처럼 보이지만 결국에는 연결이 부족하여 오류가 발생했습니다.
ERROR: no more connections allowed
이 문제를 더 진단하고 수정하려면 어떻게합니까?