Ich analysiere IBM JVM Thread Dumps, um verschiedene Informationen zu extrahieren. Im aktuellen Kontext die Lock-ID, auf der der Thread wartet, und die ID des Threads, der diese Sperre besitzt. Die Lock-ID ist für alle Dumps konsistent und hat die Form des Hexadezimalwerts 0x000000000B0D9A20
. Aber die ID des Thread-Haltesperre nimmt andere Werte an wie die Hex-ID des gleichen Forms wie die Lock-ID oder etwas wie <unknown>
oder <unowned>
. Es ist die ID des Schließbesitzers, die ich schwer zu extrahieren finde.Kombinieren von zwei Gruppen zu einer in Regex
IBM Thread-Dump gibt Lock-Info mit drei Klauseln (wie Sie in erster Screenshot sehen):
Waiting on...
Blocked on...
Parked on...
Ich Durchführung ODER-Verknüpfung diese Klauseln in Regex.
Ich habe eine generische Methode geschrieben, die
- Thread-Dump Linie
- regex akzeptiert
- Anzahl der Gruppen gelten, in einer Liste
Zum Beispiel zurückzukehren, um den Anruf method1(threadDumpLine,regex,2)
wird Wenden Sie regex
auf threadDumpLine
an und geben Sie die Liste [group1,group2]
zurück, wobei group1
eine erste Gruppe ist, die währenderfasst wurdeist der zweite.
Die erste Gruppe muss die Lock-ID sein, die ich erfassen kann, aber die zweite Gruppe kann entweder Hex ID oder <unknown>
oder <unowned>
sein. Ich bin in der Lage Sperre Besitzers ID als zweite Gruppe zu erfassen, aber wenn es <unowned>
oder <unknown>
ist dann stellt sich heraus dritte Gruppe sein:
(oben auf regex101)
, was geschieht, weil ich zwei definiert separate Gruppen zum Erfassen der ID des Schließbesitzers und <text>
. Also habe ich versucht, die beiden in einem zu kombinieren, wie folgt:
(oben auf regex101)
Wie kann ich die Regex ändern oben mit möglichst wenig Schritte wie angegeben zu erfassen?
Es wäre schön, einen Blick haben auf alle Daten dort verursachen Ausnahmen geben könnte, aber hier ist ein Vorschlag '(?: Blockierte auf | Geparkt auf | Warten auf): [^ @] * @ (0x [0-9A-F] *) Gehört zu:. *? (<[^>] +> | 0x [0-9A-F] *). * ' –
Hinweis: Die' ' on'' Text könnte außerhalb des '(?: ...)' like '(?: Blocked | Geparkt | Waiting) auf ' –