Thread-Snapshots in APM-Tracer konfigurieren

Mit der Thread-Snapshots-Funktion können Sie Thread-Stack-Snapshots sammeln, die für eine tiefgreifende Tauchanalyse verwendet werden können.

Mit den Thread-Snapshots können Traces wie Thread-Stack-Snapshots, Thread-Speicher-Overhead, Thread-CPU-Overhead und GC-Auswirkungen auf Trace erfasst werden. Er erfasst die Thread-Stack-Snapshots und stapelbezogenen Daten wie Status und Sperren in einem bestimmten Intervall.

Benutzer können die Erfassung von Thread-Stack-Snapshots aktivieren, um Stack-Dumps von Spans zu erstellen. Sie bietet Sichtbarkeit für Benutzercode-Stacks.

Das Standardzeitintervall für die Thread-Snapshots-Erfassung beträgt 250 ms.

APM Tracer Version 1.4 oder höher unterstützt Thread-Snapshots und ist standardmäßig deaktiviert.

Unterstützungs-Thread-Snapshots für APM-Tracer und APM-Agent. Weitere Informationen zum Konfigurieren von Thread-Snapshots in APM Agent finden Sie unter Thread-Snapshots in APM Agent konfigurieren.

Thread-Snapshots in APM-Tracer aktivieren

Thread-Snapshot ist in ApmTracer integriert. Sie wird beim Erstellen des ApmTracer-Objekts initialisiert.

Wenn Sie Helidon verwenden, fahren Sie mit Thread Snapshots in Helidon fort.

Das folgende Beispiel zeigt viele Konfigurationsmethoden, darunter die Methode für Thread-Snapshots: withCollectDeepDiveTraceSnapshot mit dem Wert (true). Thread-Snapshots werden von der Build-Funktion von ApmTracer aufgerufen:


ApmTracer tracer = (ApmTracer) new ApmTracer.Builder(AGENT_TRACER_NAME,serviceName)
                      .withProperty(PROP_NAME_HYBRID_TRACER_STARTER, PROP_VALUE_HYBRID_TRACER_STARTER)                      
                      .withMicrosecondAccurateTimestamp(microsecondAccurate)                      
                      .withObject(agentCommon)                       
                      .withTraceListener(traceListener)                      
                      .withCollectThreadId(collectThreadId)                      
                      .withCollectThreadName(collectThreadName)                      
                      .withCollectDeepDiveTraceSnapshot(true)
                      .build();

Informationen zur Instanziierung von APM-Tracer finden Sie unter Instantiate APM Tracer.

Konfigurationsmethoden für Thread-Snapshots

Die folgenden Konfigurationsmethoden sind verfügbar:

Methode Beschreibung Einheit Standardwert Unterstützte Werte
withMaxPercentTraceExportToCollectorPerMinute Maximaler Prozentsatz der eingehenden Traces pro Minute, um sie in den Collector zu exportieren. Prozentsatz 100

Minimum:1

Maximum: 100

withMaxTraceExportToCollectorPerMinute Maximale Anzahl der Top Traces pro Minute, um sie in den Collector zu exportieren. Nummer 2000

Minimum:1

Maximum: 1500

withSnapshotCollectionIntervalInMS Intervall, in dem Thread-Snapshot-Daten erfasst werden. Millisekunden 250

Minimum:250

Maximum: 300000

withMaxSnapshotsPerTrace Maximal zulässige Anzahl an Snapshots pro Trace. Nummer 16

Minimum: 1

Maximum: 16

withMaxStackTraceDepthPerSnapshot Maximal gesammelte Stacktrace Frames für jeden Thread. Nummer 256

Minimum: 1

Maximum: 256

withLogLevel Drucken Sie tiefe Tauchlogs, die diesem Eigenschaftswert entsprechen oder darüber liegen. Zeichenfolge INFO

DEBUG, INFO, WARNUNG, SCHWERWIEGEND

withMaxProcessCpuUsagePercent Maximale Prozess-CPU-Auslastung. Es wird empfohlen, die gesamte CPU-Auslastung des Prozesses unter diesem Schwellenwert zu halten. Nummer 90

Minimum: 1

Maximum: 90

withDeepDiveCpuUsagePercent Mindestschwellenwert für die allgemeine tiefe CPU-Auslastung. Prozentsatz 3

Minimum: 1

Maximum: 5

  Maximaler Schwellenwert für die allgemeine tiefe CPU-Auslastung. Prozentsatz 5

Minimum: 5

Maximum: 20

withTraceLifeInMS Minimaler Schwellenwert für ein Trace. Millisekunden 50

Minimum: 50

Maximum: 60000

  Maximaler Schwellenwert für ein Trace. Millisekunden 60000

Minimum: 60000

Maximum: 600000

Beispiel:
DeepDiveConfiguration deepDiveConfiguration = DeepDiveConfigurationBuilder.builder()
                                              .withMaxPercentTraceExportToCollectorPerMinute(100) 
                                              .withMaxTraceExportToCollectorPerMinute(200) 
                                              .withSnapshotCollectionIntervalInMS(250)     
                                              .withMaxSnapshotsPerTrace(16)               
                                              .withMaxStackTraceDepthPerSnapshot(256)                   
                                              .withLogLevel("INFO")                             
                                              .withMaxProcessCpuUsagePercent(90)                              
                                              .withDeepDiveCpuUsagePercent(Range.RangeBuilder.builder()
                                              .withMinThreshold(3).withMaxThreshold(5).build()) 
                                              .withTraceLifeInMS(Range.RangeBuilder.builder()
                                              .withMinThreshold(50).withMaxThreshold(60000).build()) 
                                              .build();

ApmTracer tracer = (ApmTracer) new ApmTracer.Builder(AGENT_TRACER_NAME, serviceName)
                            .withObject(deepDiveConfiguration)
                            .withCollectDeepDiveTraceSnapshot(true)
                            .build();

Thread-Snapshots in Helidon

Thread-Snapshots werden in Helidon unterstützt. Sie wird bei der ApmTracer-Objekterstellung in Helidon initialisiert.

Um Thread-Snapshots zu aktivieren, aktualisieren Sie die Datei YAML von Helidon, fügen Sie die Eigenschaft collect-deepdive-trace-snapshots hinzu, und setzen Sie sie auf true.

Beispiel:

tracing:
    name: "Helidon APM Tracer"
    service: "helidonse-http"
    data-upload-endpoint:<endpoint-url>
    private-data-key: <private-data-key>
    collect-metrics:true
    collect-resources: true
    collect-deepdive-trace-snapshots:true

Informationen zur Verwendung von APM Tracer in Helidon finden Sie unter APM Tracer in Helidon verwenden.

Konfigurationseigenschaften für Helidon

Um Thread-Snapshots in Helidon zu konfigurieren, aktualisieren Sie die YAML-Datei von Helidon mit den folgenden Eigenschaften:

Eigenschaftsname Beschreibung Einheit Standardwert Unterstützte Werte
com.oracle.apm.agent.deepdive.maxPercentTraceExportToCollectorPerMinute Maximaler Prozentsatz der eingehenden Traces pro Minute, um sie in den Collector zu exportieren. Prozentsatz 100

Minimum:1

Maximum: 100

com.oracle.apm.agent.deepdive.maxTraceExportToCollectorPerMinute Maximale Anzahl der Top Traces pro Minute, um sie in den Collector zu exportieren. Nummer 2000

Minimum:1

Maximum: 1500

com.oracle.apm.agent.deepdive.snapshotCollectionIntervalInMS Intervall, in dem Thread-Snapshot-Daten erfasst werden. Millisekunden 250

Minimum:250

Maximum: 300000

com.oracle.apm.agent.deepdive.maxSnapshotsPerTrace Maximal zulässige Anzahl an Snapshots pro Trace. Nummer 16

Minimum: 1

Maximum: 16

com.oracle.apm.agent.deepdive.maxStackTraceDepthPerSnapshot Maximal gesammelte Stacktrace Frames für jeden Thread. Nummer 256

Minimum: 1

Maximum: 256

com.oracle.apm.agent.deepdive.logLevel Drucken Sie tiefe Tauchlogs, die diesem Eigenschaftswert entsprechen oder darüber liegen. Zeichenfolge INFO

DEBUG, INFO, WARNUNG, SCHWERWIEGEND

com.oracle.apm.agent.deepdive.maxProcessCpuUsagePercent Maximale Prozess-CPU-Auslastung. Es wird empfohlen, die gesamte CPU-Auslastung des Prozesses unter diesem Schwellenwert zu halten. Nummer 90

Minimum: 1

Maximum: 90

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.minSchwellenwert Mindestschwellenwert für die allgemeine tiefe CPU-Auslastung. Prozentsatz 3

Minimum: 1

Maximum: 5

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.maxThreshold Maximaler Schwellenwert für die allgemeine tiefe CPU-Auslastung. Prozentsatz 5

Minimum: 5

Maximum: 20

com.oracle.apm.agent.deepdive.traceLifeInMS.minSchwellenwert Minimaler Schwellenwert für ein Trace. Millisekunden 50

Minimum: 50

Maximum: 60000

com.oracle.apm.agent.deepdive.traceLifeInMS.maxThreshold Maximaler Schwellenwert für ein Trace. Millisekunden 60_000

Minimum: 60000

Maximum: 600000

Beispiel:
deepDiveProperties:
 com.oracle.apm.agent.deepdive.maxPercentTraceExportToCollectorPerMinute: 100
 com.oracle.apm.agent.deepdive.maxTraceExportToCollectorPerMinute: 200
 com.oracle.apm.agent.deepdive.snapshotCollectionIntervalInMS: 250
 com.oracle.apm.agent.deepdive.maxSnapshotsPerTrace: 16
 com.oracle.apm.agent.deepdive.maxStackTraceDepthPerSnapshot: 256
 com.oracle.apm.agent.deepdive.logLevel: INFO
 com.oracle.apm.agent.deepdive.maxProcessCpuUsagePercent: 90
 com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.minThreshold: 3
 com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.maxThreshold: 5
 com.oracle.apm.agent.deepdive.traceLifeInMS.minThreshold: 50
 com.oracle.apm.agent.deepdive.traceLifeInMS.maxThreshold: 60000

Thread-Snapshots überprüfen

Um zu prüfen, ob die Funktion "Thread-Snapshots" richtig konfiguriert wurde und Daten in Application Performance Monitoring hochgeladen werden, verwenden Sie die Option Snapshot-Ansicht unter Trace- oder Span-Details anzeigen.