'netstat'에 해당되는 글 5

  1. 2011.06.10 실행 경로, 사용중인 포트 찾기
  2. 2011.03.08 특정 포트를 사용하고 있는 프로그램 찾기
  3. 2010.11.05 Oracle APEX 를 실행하는 프로그램 찾기
  4. 2010.06.04 윈도우 프로세스 - 동일한 실행 파일을 사용한 서비스
  5. 2009.12.21 서버가 구동되지 않을때

실행 경로, 사용중인 포트 찾기

고객사에 기술지원을 하다 보면 관리가 제대로 되지 않아 WAS 를 어떻게 실행시키는지, 포트번호가 어떻게 되는지도 몰라서 난감할때가 많다.
이럴때 찾는 방법

- 포트번호를 알고 있으면 먼저 netstat 로 PID 를 확인한다.
PrcView 를 통해서 실행 경로를 찾는다.

- 콘솔로 실행시킨 경우 콘솔제목을 알면 tasklist 로 PID 를 확인한다.
(netstat 로 포트를 확인할 수 있다.)
PrcView 를 통해서 실행 경로를 찾는다.

- 서비스로 실행시킨 경우에는 서비스 속성을 통해서 확인한다.

특정 포트를 사용하고 있는 프로그램 찾기

팀원이 Tomcat 이 죽은거 같다고 한다.
웹페이지 접속이 안된다고 하는데.

- netstat 로 확인해 보니 정상적이다.
혹시 이 프로세스가 80 포트를 점유하고 있을수도 있으므로 PrcView 로 확인해본다.


역시 Tomcat 이다.
이 Tomcat 이 어떻게 실행되었는지 확인해 본다.
Original Filename 이 prunsrv.exe 다.


Process Tree 로 보니 services.exe 아래에 있다.


Oracle APEX 를 실행하는 프로그램 찾기

간만에 개발서버에 접속하려는데 Oracle APEX 에 접속이 되지 않는다.
어떤 서비스를 실행시켜야 하는지 모르겠다.
포트가 8080이니깐 찾아보자.
> netstat -nao | findstr 8080
  TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING       1388
(외부에서는 접속 못하게 되어 있네.)

PID가 1388인 프로세스를 찾자.
> tasklist | findstr 1388
TNSLSNR.EXE                 1388 RDP-Tcp#133             0      7,852 K

아마 오라클 서비스겠지.
>sc qc "OracleXETNSListener"
[SC] GetServiceConfig SUCCESS

SERVICE_NAME: OracleXETNSListener
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\oraclexe\app\oracle\product\10.2.0\server\BIN\tn
slsnr.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : OracleXETNSListener
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem


윈도우 프로세스 - 동일한 실행 파일을 사용한 서비스

개발자가 프로그램을 올리고 콘솔에서 WAS를 다시 시작시킴.
WAS가 내려가 있는 줄 알고 다시 시작했고(WAS를 내리지 않고 작업을 했음) 사이트가 제대로 돌아가는지 확인은 하지 않음.
사이트가 돌아가지 않아 서버관리자가 재부팅을 시킴.
서비스에 등록된 WAS가 동작해서 서비스함.

> netstat -nao | findstr LIST | findstr :80
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       1920
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       1900

> tasklist | findstr httpd
httpd.exe                     1708 Console //80
httpd.exe                     1732 Console //8080

> tasklist | findstr java
java.exe                      1900 Console //8080
java.exe                      1920 Console //80

> tasklist /m | findstr httpd
httpd.exe                     1708 ntdll.dll, kernel32.dll, WS2_32.dll,
httpd.exe                     1732 ntdll.dll, kernel32.dll, WS2_32.dll,
                                   libhttpd.dll, USER32.dll, GDI32.dll,
                                   libhttpd.dll, USER32.dll, GDI32.dll,
                                   libhttpd.dll, USER32.dll, GDI32.dll,

테스트용으로 등록해뒀는 서비스가 8080포트로 동작하고 있었음.
사용하지 않는 서비스는 사용않함으로 둘 것.

PrcView에서 1708 httpd.exe의 커맨드라인 확인
"c:\resin-pro-3.0.25\httpd.exe" -service -java_home  C:\Java\jdk1.5.0_12 -resin_home  c:\resin-pro-3.0.25  -J-server  -Xms512m  -Xmx512m  -XX:PermSize=256m  -XX:MaxPermSize=256m

서비스에 등록된 실행경로
"c:\resin-pro-3.0.25\httpd.exe" -service -java_home  C:\Java\jdk1.5.0_12 -resin_home  c:\resin-pro-3.0.25  -J-server  -Xms512m  -Xmx512m  -XX:PermSize=256m  -XX:MaxPermSize=256m

1708은 80포트를 사용하는 서비스임.

테스트 WAS의 실행경로
"C:\resin-pro-3.0.25\httpd.exe" -service -java_home  C:\Java\jdk1.5.0_12 -resin_home  C:\resin-pro-3.0.25  -J-server  -Xms512m  -Xmx512m  -XX:PermSize=256m  -XX:MaxPermSize=256m  -conf  conf/test.conf  -server  test

PrcView에서 1920 java.exe의 커맨드라인
"C:\Java\jdk1.5.0_12\bin\java.exe" "-server" "-Xms512m" "-Xmx512m" "-XX:PermSize=256m" "-XX:MaxPermSize=256m" -classpath "c:\resin-pro-3.0.25\classes;c:\resin-pro-3.0.25\lib\resin.jar;C:\Java\jdk1.5.0_12\lib\tools.jar;C:\Java\jdk1.5.0_12\jre\lib\rt.jar;c:\resin-pro-3.0.25\lib\activation.jar;..." -Dresin.home="c:\resin-pro-3.0.25" -Dserver.root="c:\resin-pro-3.0.25" -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl com.caucho.server.resin.Resin -socketwait 1029

> netstat -nao | findstr 1029
  TCP    127.0.0.1:1029         0.0.0.0:0              LISTENING       1708
  TCP    127.0.0.1:1029         127.0.0.1:1036         ESTABLISHED     1708
  TCP    127.0.0.1:1036         127.0.0.1:1029         ESTABLISHED     1920

- PrcView로 프로세스 트리를 확인해 봄.


- 서비스가 아닌 구동 스크립트로 시작한 경우의 프로세스

직접 실행시킨 경우 사용자가 Administrator로 되어 있고 세션 이름이 RDP-...(원격데스크톱으로 들어갔음, 직접 들어가면 Console인가?)이다.
서비스로 구동시켰을때는 SYSTEM이고 세션 이름이 Services이다.

- ptree, tlist 등의 도구를 활용하면 비슷한 결과를 얻어낼 수 있다.

서버가 구동되지 않을때

서버가 구동되지 않을때 제일 먼저 살펴볼 것은 포트 충돌이다.
물론 로그를 봐도 되겠지만 서버가 이상하게 동작하는 경우 재시작을 해봐도 이상한 증상이 나오는 경우 포트부터 점검해 볼 것.

> netstat -nao | findstr 8080
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       2648
  TCP    10.20.30.40:8080      111.212.50.111:3550    TIME_WAIT       0
  TCP    10.20.30.40:8080      111.212.50.111:3575    TIME_WAIT       0

작업관리자에서 해당 PID를 찾아서 확인한다.

  1. 주로 보면 서비스로 서버를 띄우고, 콘솔로 서버를 다시 띄우는 경우도 많다.
  2. 기존에 설치된 프로그램이 같은 포트를 사용하고 있는 경우


  3. 서버가 제대로 내려가지 않은 경우도 있다. : 이클립스에서 톰캣을 구동시켰는데 문제가 생겨 이클립스만 닫은 경우
  4. 방화벽으로 막혀 있는 경우도 있다.