Support-Tools
Die Support-Tools-Erweiterung wird für Diagnoseoperationen in ThingWorx verwendet, z.B. das Sammeln von Thread-Dumps, das Überwachen der Leistung und das Ausgeben von Heaps.
Speicherort
Dieses Tool steht auf der Seite support.ptc.com unter Software herunterladen > Software-Aktualisierungen bestellen oder herunterladen > ThingWorx Foundation > Release 8.5 > ThingWorx Support Tool > Neuester Datumscode > ThingWorx-Support-Tools--<Version> zur Verfügung.
Erweiterung verwenden
Nachdem Sie die Erweiterung in ThingWorx importiert haben, werden die folgenden Entitäten erstellt.
SupportTools.Template – Dingvorlage, die Diagnosedienste enthält.
SupportTools.Entity – Dinginstanz des Support-Tools, die Zugriff auf Diagnosedienste bietet.
SupportTools.Repository – Datei-Repository, in dem das Support-Tool Dateien überwacht und generiert.
Die Erweiterung stellt Dienste bereit, um die folgenden Diagnoseoperationen zu ermöglichen:
Schreibt den Heap-Status der Java Virtual Machine auf die Festplatte (Heap-Speicherabbild).
Schreibt den Thread-Status der Java Virtual Machine auf die Festplatte (Thread-Dump oder Stacktrace).
Erstellt einen Watchdog-Prozess auf dem ThingWorx Server, der verwendet werden kann, um eines der vorstehenden Ereignisse in Situationen, in denen ThingWorx Composer nicht antwortet, auszulösen.
So lösen Sie einen Thread-Dump bzw. ein Stacktrace mit dem Watchdog aus:
Erstellen Sie eine leere Datei mit Namen runstacktrace im Verzeichnis /ThingworxStorage/repository/SupportTools.Repository.
Thread-Dumps werden (standardmäßig) weiterhin alle 30 Sekunden auf die Festplatte geschrieben, bis diese Datei erneut gelöscht wird.
So lösen Sie ein Heap-Speicherabbild mit dem Watchdog aus:
Erstellen Sie eine leere Textdatei mit Namen dumpheap im Verzeichnis /ThingworxStorage/repository/SupportTools.Repository ohne Erweiterung.
Bei der nächsten Watchdog-Prüfung wird ein Heap-Speicherabbild erstellt. Der Watchdog für das Heap-Speicherabbild wird daraufhin bis zum nächsten Serverneustart deaktiviert.
So unterbrechen einen Thread-Dump bzw. ein Stacktrace mit dem Watchdog:
Löschen Sie die Datei mit dem Namen runstacktrace im Verzeichnis /ThingworxStorage/repository/SupportTools.Repository.
Verwenden Sie den StopDiagnosticWatchdog-Dienst.
Heap-Speicherabbild-Dienste
Im Allgemeinen ist ein Heap-Speicherabbild in den folgenden Situationen hilfreich:
Speicherprobleme, bei denen ein Leck vermutet wird
Keine Reaktion vom Server
Die Ausgabe des Java-Heaps auf die Festplatte ist eine aufwändige Operation, bei der der ThingWorx Server nicht reagiert, während eine vollständige Garbage Collection erfolgt und der Heap auf die Festplatte geleert wird. Dieser Prozess kann viel Zeit in Anspruch nehmen bei einem großen JVM-Heap (10-30 Minuten).
Es stehen die folgenden Heap-Speicherabbild-Dienste zur Verfügung:
SetHeapDumpFlag – Um zu verhindern, dass der Heap versehentlich ausgegeben wird, erfordert die Support-Tool-Erweiterung, dass der SetHeapDumpFlag-Dienst vor dem DumpHeap-Dienst ausgeführt wird, um sicherzustellen, dass der Benutzer den Heap auf die Festplatte ausgeben möchte. Dieser Dienst legt ein internes Kennzeichen fest, das den DumpHeap-Dienst aktiviert. Dieses Kennzeichen wird nicht über Serverneustarts hinweg beibehalten, d.h. wenn der ThingWorx Server neu gestartet wird, so muss der SetHeapDumpFlag-Dienst erneut ausgeführt werden. Das interne Kennzeichen, das den DumpHeap-Dienst aktiviert, kann durch Ausführen des ClearHeapDumpFlag-Diensts deaktiviert werden.
ClearHeapDumpFlag – Löscht das interne Kennzeichen, das die Verwendung des DumpHeap-Diensts aktiviert und ihn deaktiviert, bis der SetHeapDumpFlag-Dienst erneut ausgeführt wird.
DumpHeap – Um versehentliche Heap-Speicherabbilder zu verhindern, die den Server für einige Minuten sperren können, während sie ausgeführt werden, kann dieser Dienst nur ausgeführt werden, nachdem der SetHeapDumpFlag-Dienst ausgeführt wurde. Dieser Dienst weist die JVM an, Folgendes zu tun:
den aktuellen Thread-Status auf die Festplatte auszugeben (geschrieben auf /ThingworxStorage/repository/SupportTools.Repository/stacktrace, angehängt, falls vorhanden)
den aktuellen JVM-Heap-Status auf die Festplatte auszugeben (geschrieben auf <TomcatVerzeichnis>/logs/heapdump.hprof, wobei eine vorhandene Datei überschrieben wird)
* 
Das Heap-Speicherabbild wird nicht automatisch in das Repository geschrieben. Es muss außerhalb der ThingWorx Ordner komprimiert werden.
Thread-Dump-Dienste (Stacktraces)
DumpAllThreads – Schreibt den aktuellen Thread-Status der JVM auf die Festplatte. Standardmäßig werden Stacktraces in /ThingworxStorage/repository/SupportTools.Repository/stacktrace geschrieben. Ist die Datei bereits vorhanden, so wird der neue Thread-Dump an das Ende der Datei angehängt. Ein Stacktrace/Thread-Dump besteht aus Folgendem:
Zeitstempel, d.h. wann der Thread gesammelt wurde
ID, Thread-Status und Threadaufruf-Stacks für jeden Live-Thread in der JVM
Watchdog-Operationen
Der Diagnose-Watchdog ist ein kleiner Prozess, der im Hintergrund des ThingWorx Servers ausgeführt wird und das Dateisystem auf Trigger-Dateien überwacht. Es ist nicht erforderlich, diesen Prozess zu beenden, zu starten oder anzupassen, es sei denn der technische Support von PTC rät dazu.
Dieser Prozess wird automatisch gestartet, wenn ThingWorx neu gestartet wird, und bietet die folgenden Vorteile:
Die Möglichkeit, Thread-Dumps/Stacktraces automatisch in einem regulären Intervall zu generieren
Die Möglichkeit, ein Thread-Dump oder ein Heap-Speicherabbild auszulösen, wenn Composer nicht reagiert oder nicht erreichbar ist
Es stehen die folgenden Watchdog-Dienste zur Verfügung:
GetWatchdogInterval – Gibt das aktuelle Intervall zwischen Watchdog-Prüfungen zurück oder -1, wenn der Watchdog nicht ausgeführt wird.
SetWatchdogInterval – Ändert das Watchdog-Intervall in einen neuen Wert in Sekunden. Das Standardintervall beträgt 30 Sekunden. Das neue Intervall wird nach der nächsten Watchdog-Prüfung wirksam.
StartDiagnosticWatchdog – Startet den Diagnose-Watchdog-Thread, wenn dieser angehalten wurde.
StopDiagnosticWatchdog – Stoppt den Diagnose-Watchdog-Thread, wenn dieser gestartet wurde.