Support Tool
Support Tool 확장 프로그램은 스레드 덤프 수집, 성능 모니터링 및 힙 덤프와 같이 ThingWorx의 진단 작업에 사용됩니다.
위치
이 도구는 support.ptc.com소프트웨어 다운로드 > 소프트웨어 업데이트 주문 또는 다운로드 > ThingWorx Foundation > Release 8.5 > ThingWorx Support Tool > 최근 제조코드 > ThingWorx-Support-Tools--<버전>에서 사용할 수 있습니다.
확장 사용
이 확장 프로그램을 ThingWorx로 가져오면 다음 엔티티가 생성됩니다.
SupportTools.Template - 진단 서비스를 포함 하는 사물 템플릿.
SupportTools.Entity - 진단 서비스에 대한 액세스를 제공하는 Support Tool의 사물 인스턴스.
SupportTools.Repository - Support Tool이 파일을 모니터하고 생성하는 파일 저장소.
이 확장 프로그램은 다음과 같은 진단 작업을 허용하는 서비스를 제공합니다.
Java Virtual Machine의 힙 상태를 디스크에 기록합니다(힙 덤프).
Java Virtual Machine의 스레드 상태를 디스크에 기록합니다(스레드 덤프 또는 스택 추적).
ThingWorx Composer가 응답하지 않는 상황에서 위 이벤트 중 하나를 트리거하는 데 사용할 수 있는 watchdog 프로세스를 ThingWorx 서버에 작성합니다.
watchdog을 사용하여 스레드 덤프/스택 추적 트리거하기:
/ThingworxStorage/repository/SupportTools.Repository 디렉터리에 runstacktrace라는 빈 파일을 작성합니다.
이 파일이 다시 삭제될 때까지 스레드 덤프가 30초 마다(기본값) 디스크에 계속 기록됩니다.
watchdog을 사용하여 힙 덤프 트리거하기:
/ThingworxStorage/repository/SupportTools.Repository 디렉터리에 dumpheap라는 빈 텍스트 파일을 만듭니다.
힙 덤프는 다음 watchdog 확인에서 한 번만 수행됩니다. 그러면 다음 서버가 다시 시작될 때까지 힙 덤프 watchdog이 비활성화됩니다.
watchdog을 사용하여 스레드 덤프/스택 추적 중지하기:
/ThingworxStorage/repository/SupportTools.Repository 디렉터리에 runstacktrace라는 파일을 삭제합니다..
StopDiagnosticWatchdog 서비스를 사용합니다.
힙 덤프 서비스
일반적으로 힙 덤프는 다음과 같은 경우에 유용합니다.
누수가 의심되는 메모리 문제
서버 중단
Java 힙을 디스크에 덤프하는 작업은 부담이 큰 작업이며 전체 가비지 수집이 완료되고 힙이 디스크에 플러시되는 동안 ThingWorx 서버를 응답하지 않는 상태로 만듭니다. 이 프로세스는 대용량 JVM 힙(10-30분)의 경우 완료하는 데 시간이 오래 걸릴 수 있습니다.
다음과 같은 힙 덤프 서비스를 사용할 수 있습니다.
SetHeapDumpFlag - 힙이 실수로 덤프되는 것을 방지하기 위해 Support Tool 확장 프로그램에서 DumpHeap 서비스 전에 SetHeapDumpFlag 서비스를 실행하여 사용자가 힙을 디스크에 덤프하려고 하는지 확인해야 합니다. 이 서비스는 DumpHeap 서비스를 활성화하는 내부 플래그를 설정합니다. 이 플래그는 서버를 다시 시작한 후에 유지되지 않기 때문에 ThingWorx 서버가 다시 시작되면 SetHeapDumpFlag 서비스를 다시 실행해야 합니다. ClearHeapDumpFlag 서비스를 실행하여 DumpHeap 서비스를 사용 가능으로 설정하는 내부 플래그를 비활성화할 수 있습니다 .
ClearHeapDumpFlag - SetHeapDumpFlag 서비스의 사용을 활성화하는 내부 플래그를 지워 DumpHeap 서비스가 다시 실행될 때까지 서비스를 비활성화합니다.
DumpHeap - 힙 덤프가 실행되는 동안 몇 분 간 서버를 잠글 수 있는 실수로 인한 힙 덤프를 방지하려면 SetHeapDumpFlag 서비스가 실행된 후에만 이 서비스를 실행할 수 있습니다. 이 서비스는 JVM에 다음을 수행하도록 지시합니다.
현재 스레드 상태를 디스크에 덤프합니다(/ThingworxStorage/repository/SupportTools.Repository/stacktrace에 기록, 있는 경우 추가).
현재 JVM 힙 상태를 디스크에 덤프합니다( <TomcatDirectory>/logs/heapdump.hprof에 기록, 기존 파일이 있는 경우 덮어씀).
* 
힙 덤프는 원칙적으로 저장소에 기록되지 않습니다. ThingWorx 폴더 외부에서 압축해야 합니다.
스레드 덤프 서비스(스택 추적)
DumpAllThreads - JVM의 현재 스레드 상태를 디스크에 기록합니다. 기본적으로 스택 추적은 /ThingworxStorage/repository/SupportTools.Repository/stacktrace에 기록됩니다. 파일이 이미 있는 경우 새 스레드 덤프가 파일 끝에 추가됩니다. 스택 추적/스레드 덤프는 다음과 같이 구성됩니다.
스레드가 수집되었을 때의 타임스탬프.
JVM의 각 라이브 스레드에 대한 식별자, 스레드 상태 및 스레드 호출 스택.
Watchdog 작업
Diagnostic Watchdog은 ThingWorx 서버의 백그라운드에서 실행되는 작은 프로세스로 파일 시스템에서 트리거 파일을 관찰합니다. 이 프로세스는 PTC 기술 지원의 지시가 없는 한 중지, 시작 또는 조정할 필요가 없습니다.
이 프로세스는 ThingWorx가 다시 시작될 때 자동으로 시작되어 다음과 같은 이점을 제공합니다.
정기적인 간격으로 스레드 덤프/스택 추적을 자동으로 생성할 수 있습니다.
Composer가 응답하지 않거나 연결할 수 없는 경우 스레드 덤프 또는 힙 덤프를 트리거할 수 있습니다.
다음과 같은 watchdog 서비스를 사용할 수 있습니다.
GetWatchdogInterval - 현재 watchdog 확인 간격을 반환하거나 watchdog이 실행되고 있지 않은 경우 -1을 반환합니다.
SetWatchdogInterval - watchdog 간격을 초 단위의 새 값으로 변경합니다. 기본 간격은 30초입니다. 새 간격은 다음 watchdog 확인 후에 적용됩니다.
StartDiagnosticWatchdog - 중지된 경우 Diagnostic Watchdog 스레드를 시작합니다.
StopDiagnosticWatchdog - 시작된 경우 Diagnostic Watchdog 스레드를 중지합니다.