'서비스'에 해당되는 글 4

  1. 2012.02.16 CPU를 과점하는 서비스 제거 - mscorsvw.exe
  2. 2012.02.16 디스크 I/O가 많은 프로세스 찾기 - SearchIndexer.exe
  3. 2011.03.08 특정 포트를 사용하고 있는 프로그램 찾기
  4. 2010.06.04 윈도우 프로세스 - 동일한 실행 파일을 사용한 서비스

CPU를 과점하는 서비스 제거 - mscorsvw.exe

- 작업관리자로 확인


mscorsvw.exe가 범인
.NET Framework 2.0의 윈도우즈 전용 프리컴파일링 서비스라고 한다.
나는 쓸일이 없으니 서비스를 내리자.

- 서비스에서는 다른 이름이다.
해당 서비스를 중지시키고 사용하지 않도록 한다.



디스크 I/O가 많은 프로세스 찾기 - SearchIndexer.exe

하드디스크가 쉴새없이 돌아간다.
CPU 사용량은 그렇게 많지 않다.

- 작업관리자로는 확인이 안된다.
리소스 모니터로 확인해본다.


SearchIndexer.exe 다.
인덱싱 서비스인데... 내리자.

- 서비스에서는 Windows Search라는 이름이다.
해당 서비스를 중지시키고 사용하지 않도록 한다.

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

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

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


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


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


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

개발자가 프로그램을 올리고 콘솔에서 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 등의 도구를 활용하면 비슷한 결과를 얻어낼 수 있다.