원인
glsnr 프로세스는 있으나, 소켓파일이 없는 경우 발생합니다.
glsnr 가 정상적으로 구동중일 때 상태 체크
1. glsnr 프로세스 확인
$ ps -ef | grep glsnr sh 31020 1 0 14:32 pts/2 00:00:00 glsnr --start --msgqkey=22583
2. 소켓파일 유무 확인
$ ls -al /tmp/unix-glsnr* srwxrwxr-x. 1 sh sh 0 7월 10 14:32 /tmp/unix-glsnr.22581 $ file /tmp/unix-glsnr* /tmp/unix-glsnr.22581: socket
3. netstat 명령어로 LISTEN 하고있는 glsnr 포트확인
$ netstat -na | grep 22581 tcp 0 0 0.0.0.0:22581 0.0.0.0:* LISTEN tcp 0 0 192.168.0.50:22581 192.168.0.50:41714 ESTABLISHED tcp 0 0 192.168.0.50:41714 192.168.0.50:22581 ESTABLISHED unix 2 [ ] DGRAM 2997545 /tmp/unix-glsnr.22581
4. glsnr 의 상태체크 확인
$ glsnr --status Copyright © 2010 SUNJESOFT Inc. All rights reserved. Release Venus.3.1.15 revision(25159) Listener process ID : 31020 Listener configuration file : /home/sh/goldilocks_data/conf/goldilocks.listener.conf Unix Domain Path : /tmp/unix-glsnr.22581 TCP Listen Host : 0.0.0.0, Port : 22581 default C/S mode : Dedicated Connection Timeout(second) : 100 Listener is running.
문제발생 - /tmp/unix-glsnr.22581 소켓파일을 제거
$ rm /tmp/unix-glsnr*
이후 glsnr 를 통해 접속하려고 하는 세션과, glsnr 의 상태조회가 되지 않음
1. glsnr 프로세스 확인
$ ps -ef | grep glsnr sh 31020 1 0 14:32 pts/2 00:00:00 glsnr --start --msgqkey=22583
2. glsnr 상태체크 확인, 프로세스가 구동중인데도 not running 이라는 메세지가 발생
$ glsnr --status Copyright © 2010 SUNJESOFT Inc. All rights reserved. Release Venus.3.1.15 revision(25159) Listener is not running.
3. 세션 접속 확인 및 대기현상 발생, 이 때 pstack 조회하면 응답받는 곳에서 대기하는 것을 확인할 수 있음
$ gsqlnet TEST test Copyright © 2010 SUNJESOFT Inc. All rights reserved. Release Venus.3.1.15 revision(25159)
$ pstack 31147 #0 0x00007f9365d5cb2d in recv () from /lib64/libpthread.so.0 #1 0x00000000005b4979 in stnRecv () #2 0x000000000053bf3e in cmgRecv () #3 0x000000000053649a in cmlRecvPacket () #4 0x000000000050b005 in zlccPreHandshake () #5 0x000000000050b543 in zlccConnect () #6 0x00000000004c0f1c in zlcConnect () #7 0x00000000004ae4d4 in zllConnect () #8 0x00000000004aebe8 in SQLConnect () #9 0x000000000045f67a in ztqSQLConnect () #10 0x000000000044eb16 in ztqOpenDatabase () #11 0x00000000004647b2 in main ()
4. netstat 명령어로 LISTEN 하고있는 포트 확인 - LISTEN 은 하고있지만, 정상적인 상황이 아님
$ netstat -na | grep 22581 tcp 0 0 0.0.0.0:22581 0.0.0.0:* LISTEN tcp 0 0 192.168.0.50:41718 192.168.0.50:22581 FIN_WAIT2 tcp 1 0 192.168.0.50:22581 192.168.0.50:41718 CLOSE_WAIT tcp 0 0 192.168.0.50:22581 192.168.0.50:41716 TIME_WAIT unix 2 [ ] DGRAM 2997545 /tmp/unix-glsnr.22581
해결방법
1. glsnr 프로세스를 종료
$ ps -ef | grep glsnr sh 31020 1 0 14:32 pts/2 00:00:00 glsnr --start --msgqkey=22583 $ kill -9 31020
2. LISTEN 하고있는 소켓 상태 확인
FIN_WAIT, FIN_WAIT2, CLOSE_WAIT, TIME_WAIT 이 있을 수 있으나, 몇분 후 자동 정리
$ netstat -na | grep 22581
3. glsnr 재구동
$ glsnr --start Copyright © 2010 SUNJESOFT Inc. All rights reserved. Release Venus.3.1.15 revision(25159) Listener is started successfully.
4. glsnr 상태체크 확인
$ glsnr --status Copyright © 2010 SUNJESOFT Inc. All rights reserved. Release Venus.3.1.15 revision(25159) Listener process ID : 31259 Listener configuration file : /home/sh/goldilocks_data/conf/goldilocks.listener.conf Unix Domain Path : /tmp/unix-glsnr.22581 TCP Listen Host : 0.0.0.0, Port : 22581 default C/S mode : Dedicated Connection Timeout(second) : 100 Listener is running.