> 어느날 문득
> localhost에서 postgres에 연결이 않됩니다.
> 아래와 같이 에러가 뜹니다.
> //////////////////////////////
> [postgres@pgsql]$ psql customer
> Connection to database 'customer' failed.
> connectDB() // connect() failed: 연결이 거부됨
> Is the postmaster running at 'localhost' and accepting connections on
> Unix socket '5432'?
> //////////////////////////////
>
> 혹시나하고 ps /ef 해보니 아래와 같이 살아있더군요..
> //////////////////////////////
> postgres 6446 1 7 May08 ? 01:08:04 /usr/local/pgsql/bin/p
> ostmaster /i /S /B 256 /N 128
> //////////////////////////////
>
> 잼있는 사실은 외부로, 즉 웹을 통해서는 잘 들어와집니다.
> 또 `psql /h db.jun.co.kr customer`해도 들어와 집니다.
>
> 그래서 psql 을 kill하고 다시 가동시키니 잘되더군요..
> 근데 왜 local로 않들어 갈 졌을까요?
> postgres의 실행 옵션에 문제가 있는지.. 원인 파악이 않되는군요...
>
> 혹시 crontab에서 다음과 같은 shell script를 1분마다 돌리는게 문제가
> 있나요?
> ////////////////////////////////////////////////
> [postgres@pgsql]$ more check.sh
> #!/bin/sh
> set /x
> NUM=`ps /ef | grep postmaster | wc /l`
> echo $NUM
> if [ $NUM /lt 2 ]
> then
> \rm /tmp/.s.*
> /usr/local/pgsql/bin/postmaster /D /usr/local/pgsql/data /i /S
>
> fi
> ///////////////////////////////////////////////////////////////
읔.. 스크립트를 돌리는 이유는 뭐지요.
postmaster 가 두개미만이면 postmaster 를 다시 기동 시키는 스크립트로군요.
이런 스크립트는 전혀 무의미합니다. 이렇게 해야 하는 특별한 이유라도 있는 것인가요.
postmaster 의 작동 방식은 평소에는 대기 프로세스 하나만이 5432 port 를 listening 하면서 떠 있게 됩니다. 그러다 하나의 request 가 들어오면 postmaster 는 하나의 백엔드 프로세스를 더 기동 시키고 (즉 하나의 프로세스가 더 느는겁니다) 자신은 다시 listening state 로 들어가게 됩니다.
그러니 접속이 늘때마다 backend process 는 계속 늘게 되는 것이지요.
그러니 위에 언급한 script 는 필요없다고 생각합니다.
|