솔라리스 OS 와 리눅스 환경에서 자바 SE 6 에 대한 문제 해결(Troubleshooting) 가이드 팁(Quick Guide)

0

Written on 오후 7:47 by 강여사(J.Y.Kang)

본 문서는 "퀵 스타트 가이드"로 문제 해결(troubleshooting)을 위한 몇 가지 빠른 도움말을 제공합니다. 즉, 정보를 얻기 위해 작업을 수행하거나 하나 이상의 방법을 포함한 문제 해결에 도움이되는 몇 가지 일반적인 기능을 나열합니다.

이러한 요령으로 구성은 다음과 같습니다 : (해당 주제별)

  • 행(Hung), 데드락(Deadlocked), 또는 루핑(Looping) 프로세스
  • 사후 진단(Post-mortem Diagnostics), 메모리 누수(Leaks)
  • 모니터링
  • 원격 디버그 서버 상의 액션(Actions)
  • 기타 기능

행(Hung), 데드락(Deadlocked), 또는 루핑(Looping) 프로세스

  • 출력 쓰레드 모든 Java 쓰레드에 대한 스택 :
    • Control-\
    • kill-QUIT pid
    • jstack pid (또는 jstack -F pid , 만약 jstack pid가 응답하지 않으면)
  • 교착 상태를 감지 :
    • 교착 상태 감지 요청: JConsole 툴, 쓰레드 탭(tab)
    • 쓰레드 교착 상태에 정보 출력 : Control-\
    • 각각의 쓰레드가 소유한 동시 잠금 목록 출력: -XX:+PrintConcurrentLocks 세트, 그 후 Control-\
    • 프로세스에 대한 잠금 정보 출력 : jstack -l pid 명령
  • 프로세스에 대한 힙 히스토그램(heap histrogram) 가져오기 :
    • 자바 프로세스를 다음 옵션으로 시작 -XX:+PrintClassHistogram, 그 후 Control-\
    • jmap -histo 명령 (만약 pid 응답이 없으면 -F 옵션 추가)
  • 프로세스에 대한 자바 힙 덤프를 바이너리 형식의 파일에 덤프 뜨기:
    • jmap –dump: format=b,file=filename pid (만약 pid 응답이 없으면 -F 옵션 추가)
  • 프로세스를 위한 공유된 객체 매핑 출력
    • jmap pid
  • 프로세스를 위한 힙 요약정보 출력
    • Control-\
    • jmap -heap pid
  • 프로세스를 위한 종료자(finalization) 정보 출력
    • jmap -finalizerinfo pid
  • 프로세스에 명령어 디버거 붙이기(attach)
    • jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=pid jmap -histo 명령

사후 진단, (Post-mortem Diagnostics), 메모리 누수(Memory Leaks)

  • 치명적인 오류 로그 파일을 검사합니다. 기본 파일 이름은 hs_err_pidpid.log 로 작업 디렉토리에 들어있습니다.
  • 힙 덤프(heap dump) 생성 :
    • HPROF 활성시켜 응용 프로그램 시작: java -agentlib:hprof=file=file,format=b application; 그후 Control-Break파일
    • HPROF 활성시켜 응용 프로그램 시작: java -agentlib:hprof=heap=dump application
    • JConsole 툴에서 MBeans 탭
    • 다음 옵션으로 VM 시작 -XX:+HeapDumpOnOutOfMemoryError;; OutOfMemoryError 가 던져지면, VM은 힙 덤프(heap dump)를 자동 생성합니다.
  • 자바 힙 덤프 보기(Browse) :
    • jhat heap-dump-file
  • 프로세스에 대한 힙 히스토그램 가져오기:
    • 다음 옵션으로 자바 프로세스 시작: -XX:+PrintClassHistogram, 그후 Control-Break
    • jmap -histo pid (만약 pid 응답이 없으면 -F 옵션 추가)
  • 코어 파일로부터 힙 히스토그램 가져오기:
    • jmap -histo corefile
  • 코어 파일로부터 공유된 객체 매핑 출력:
    • jmap corefile
  • 코어 파일로부터 힙 요약정보 출력:
    • jmap -heap corefile
  • 코어 파일로부터 종료자(finalization) 정보 출력:
    • jmap -finalizerinfo corefile
  • 코어 파일로부터 자바 설정 정보 출력:
    • jinfo corefile
  • 코어 파일로부터 쓰레드 추적 출력:
    • jstack corefile
  • 코어 파일로부터 잠금 정보 출력:
    • jstack -l corefile
  • 같은 머신 상에서 코어 파일에 명령어 디버거 붙이기(attach):
    • jdb -connect sun.jvm.hotspot.jdi.SACoreAttachingConnector:javaExecutable=path,core=corefile
  • 서로 다른 머신상에서 코어 파일에 명령어 디버거 붙이기(attach):
    • 코어 파일을 가진 쪽: jsadebugd path corefile
    • 디버거를 가진 쪽: jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=machine
  • libumem 은 메모리 누수를 디버그하기 위해 사용될 수 있다.


 

모니터링 (jstat 윈도우 98이나 윈도우 ME에서 사용할 수 없습니다.)

참고 : jstat 명령에 대한 인수는 가상 머신 vmID 식별자입니다. jstat man 페이지를 참조하십시오

자세한 설명

  • 클래스 로더에 통계 출력 :
    • jstat -class vmID
  • 컴파일러에 대한 통계 출력 :
    • 컴파일러 동작 : jstat -compiler vmID
    • 컴파일 메소드에 대한 통계 : jstat - printcompilation vmID
  • 가비지 컬렉션에 통계 출력 :
    • 요약 통계 : jstat -gcutil vmID
    • 오류 포함, 요약 통계 : jstat - gccause vmID
    • GC의 힙 동작(behavior) : jstat -gc vmID
    • 모든 generations 용량 : jstat -gccapacity vmID
    • new generation 동작: jstat -gcnew vmID
    • new generation 용량: jstat -gcnewcapacity vmID
    • old 와 permanent generations 동작: jstat -gcold vmID
    • old generations 용량 : jstat -gcoldcapacity vmID
    • permanent generations 용량: jstat -gcpermcapacity vmID
  • finalization를 기다리는 개체 모니터링:
    • JConsole 툴, VM 요약 탭
    • jmap -finalizerinfo pid
    • java.lang.management.MemoryMXBean 클래스 안에 있는 getObjectPendingFinalizationCount 메소드
  • 메모리 모니터 :
    • HPROF를 통해 힙 할당 프로필(profiles) : java -agentlib:hprof=heap=sites
    • JConsole 툴, 메모리 탭
    • Control – Break 는 generation 정보 출력
  • CPU 사용률 모니터 :
    • 쓰레드 스택 관련 : java -agentlib:hprof=cpu=samples application
    • 메소드 관련 : java -agentlib:hprof=cpu=times application
    • JConsole 툴, 개요 및 VM을 요약 탭
  • 쓰레드 활동 모니터 :
    • JConsole 툴, 쓰레드 탭
  • 클래스 액티비티 모니터 :
    • JConsole 툴, 클래스 탭

원격 디버그 서버 위의 액션(actions)

  • 우선,디버그 데몬 jsadebugd 부르고, 그 후 명령 실행: jmap -dump:format=b,file=filename hostID
    • 이진 포맷의 자바 힙을 파일에 덤프:
    • 공유된 객체 매핑 출력: jmap hostID
    • 힙 요약정보 출력 jmap -heap hostID
    • 종료자 정보 출력: jmap -finalizerinfo hostID
    • 잠금 정보 출력: jstack -l hostID
    • 쓰레드 추적 출력: jstack hostID
    • 자바 설정 정보 출력: jinfo hostID

기타 기능

  • instrumented 자바 가상 머신 인터페이스 :
    • instrumented VMs (Windows 98이나 Windows ME 불가) 생성 및 종료 모니터 : jstatd daemon
    • instrumented VMs (Windows 98이나 Windows ME 불가) 목록 : jps
    • 원격 모니터링 툴 및 로컬 VM 간 인터페이스 제공 (Windows 98 이나 Windows ME 불가) : jstatd daemon
    • 가비지 컬렉션 요청 : JConsole 툴, 메모리 탭
  • 프로세스의 특정 자바 VM 플래그(flags) 값 동적 설정, 해제, 또는 변경 :
    • jinfo -flag flag pid
  • 가상 머신에 Java VM 플래그(flag) 전달하기 :
    • jconsole -Jflag ...
    • jhat -Jflag ...
    • jmap -Jflag ...
  • 클래스 로더에 의한, 자바 힙의 영속 제너레이션 통계 출력
    • jmap -permstat
  • 모니터 경합 보고 :
    • java -agentlib:hprof=monitor=y application
  • 대화식(interactive) 모드 또는 일괄처리(batch) 모드로 스크립트 평가 또는 실행 :
    • jrunscript
  • MBean 동적 인터페이스, JConsole 툴 탭을 통해 MBean :
    • 트리 구조 보기.
    • 속성 값 설정.
    • 작업(operation) 호출.
    • 알림(notification) 설정(subscribe)
  • 대화식 명령 - 라인 디버거 실행 :
    • 클래스에 대한 새 VM이 : jdb class
    • 실행중인 VM에 디버거 첨부 : jdb –attach address

If you enjoyed this post Subscribe to our feed


No Comment

댓글 쓰기