Diagnosebericht
[Stabil: 2 - Stabil]
Stabil: 2 Stabilität: 2 - Stabil
[Verlauf]
Version | Änderungen |
---|---|
v23.3.0 | Option --report-exclude-env hinzugefügt, um Umgebungsvariablen von der Berichtserstellung auszuschließen. |
v22.0.0, v20.13.0 | Option --report-exclude-network hinzugefügt, um Netzwerkoperationen auszuschließen, die die Berichtserstellung in einigen Fällen verlangsamen können. |
Liefert eine zusammenfassende Diagnose im JSON-Format, die in eine Datei geschrieben wird.
Der Bericht ist für die Entwicklung, das Testen und die Produktion gedacht, um Informationen zur Problembestimmung zu erfassen und zu speichern. Er enthält JavaScript- und native Stack-Traces, Heap-Statistiken, Plattforminformationen, Ressourcenauslastung usw. Wenn die Berichtsoption aktiviert ist, können Diagnoseberichte bei unbehandelten Ausnahmen, schwerwiegenden Fehlern und Benutzersignalen ausgelöst werden, zusätzlich zur programmatischen Auslösung über API-Aufrufe.
Ein vollständiger Beispielbericht, der bei einer nicht abgefangenen Ausnahme erstellt wurde, wird unten als Referenz bereitgestellt.
{
"header": {
"reportVersion": 5,
"event": "exception",
"trigger": "Exception",
"filename": "report.20181221.005011.8974.0.001.json",
"dumpEventTime": "2018-12-21T00:50:11Z",
"dumpEventTimeStamp": "1545371411331",
"processId": 8974,
"cwd": "/home/nodeuser/project/node",
"commandLine": [
"/home/nodeuser/project/node/out/Release/node",
"--report-uncaught-exception",
"/home/nodeuser/project/node/test/report/test-exception.js",
"child"
],
"nodejsVersion": "v12.0.0-pre",
"glibcVersionRuntime": "2.17",
"glibcVersionCompiler": "2.17",
"wordSize": "64 bit",
"arch": "x64",
"platform": "linux",
"componentVersions": {
"node": "12.0.0-pre",
"v8": "7.1.302.28-node.5",
"uv": "1.24.1",
"zlib": "1.2.11",
"ares": "1.15.0",
"modules": "68",
"nghttp2": "1.34.0",
"napi": "3",
"llhttp": "1.0.1",
"openssl": "1.1.0j"
},
"release": {
"name": "node"
},
"osName": "Linux",
"osRelease": "3.10.0-862.el7.x86_64",
"osVersion": "#1 SMP Wed Mar 21 18:14:51 EDT 2018",
"osMachine": "x86_64",
"cpus": [
{
"model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
"speed": 2700,
"user": 88902660,
"nice": 0,
"sys": 50902570,
"idle": 241732220,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
"speed": 2700,
"user": 88902660,
"nice": 0,
"sys": 50902570,
"idle": 241732220,
"irq": 0
}
],
"networkInterfaces": [
{
"name": "en0",
"internal": false,
"mac": "13:10:de:ad:be:ef",
"address": "10.0.0.37",
"netmask": "255.255.255.0",
"family": "IPv4"
}
],
"host": "test_machine"
},
"javascriptStack": {
"message": "Error: *** test-exception.js: throwing uncaught Error",
"stack": [
"at myException (/home/nodeuser/project/node/test/report/test-exception.js:9:11)",
"at Object.<anonymous> (/home/nodeuser/project/node/test/report/test-exception.js:12:3)",
"at Module._compile (internal/modules/cjs/loader.js:718:30)",
"at Object.Module._extensions..js (internal/modules/cjs/loader.js:729:10)",
"at Module.load (internal/modules/cjs/loader.js:617:32)",
"at tryModuleLoad (internal/modules/cjs/loader.js:560:12)",
"at Function.Module._load (internal/modules/cjs/loader.js:552:3)",
"at Function.Module.runMain (internal/modules/cjs/loader.js:771:12)",
"at executeUserCode (internal/bootstrap/node.js:332:15)"
]
},
"nativeStack": [
{
"pc": "0x000055b57f07a9ef",
"symbol": "report::GetNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, v8::Local<v8::String>, std::ostream&) [./node]"
},
{
"pc": "0x000055b57f07cf03",
"symbol": "report::GetReport(v8::FunctionCallbackInfo<v8::Value> const&) [./node]"
},
{
"pc": "0x000055b57f1bccfd",
"symbol": " [./node]"
},
{
"pc": "0x000055b57f1be048",
"symbol": "v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [./node]"
},
{
"pc": "0x000055b57feeda0e",
"symbol": " [./node]"
}
],
"javascriptHeap": {
"totalMemory": 5660672,
"executableMemory": 524288,
"totalCommittedMemory": 5488640,
"availableMemory": 4341379928,
"totalGlobalHandlesMemory": 8192,
"usedGlobalHandlesMemory": 3136,
"usedMemory": 4816432,
"memoryLimit": 4345298944,
"mallocedMemory": 254128,
"externalMemory": 315644,
"peakMallocedMemory": 98752,
"nativeContextCount": 1,
"detachedContextCount": 0,
"doesZapGarbage": 0,
"heapSpaces": {
"read_only_space": {
"memorySize": 524288,
"committedMemory": 39208,
"capacity": 515584,
"used": 30504,
"available": 485080
},
"new_space": {
"memorySize": 2097152,
"committedMemory": 2019312,
"capacity": 1031168,
"used": 985496,
"available": 45672
},
"old_space": {
"memorySize": 2273280,
"committedMemory": 1769008,
"capacity": 1974640,
"used": 1725488,
"available": 249152
},
"code_space": {
"memorySize": 696320,
"committedMemory": 184896,
"capacity": 152128,
"used": 152128,
"available": 0
},
"map_space": {
"memorySize": 536576,
"committedMemory": 344928,
"capacity": 327520,
"used": 327520,
"available": 0
},
"large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 1520590336,
"used": 0,
"available": 1520590336
},
"new_large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 0,
"used": 0,
"available": 0
}
}
},
"resourceUsage": {
"rss": "35766272",
"free_memory": "1598337024",
"total_memory": "17179869184",
"available_memory": "1598337024",
"maxRss": "36624662528",
"constrained_memory": "36624662528",
"userCpuSeconds": 0.040072,
"kernelCpuSeconds": 0.016029,
"cpuConsumptionPercent": 5.6101,
"userCpuConsumptionPercent": 4.0072,
"kernelCpuConsumptionPercent": 1.6029,
"pageFaults": {
"IORequired": 0,
"IONotRequired": 4610
},
"fsActivity": {
"reads": 0,
"writes": 0
}
},
"uvthreadResourceUsage": {
"userCpuSeconds": 0.039843,
"kernelCpuSeconds": 0.015937,
"cpuConsumptionPercent": 5.578,
"userCpuConsumptionPercent": 3.9843,
"kernelCpuConsumptionPercent": 1.5937,
"fsActivity": {
"reads": 0,
"writes": 0
}
},
"libuv": [
{
"type": "async",
"is_active": true,
"is_referenced": false,
"address": "0x0000000102910900",
"details": ""
},
{
"type": "timer",
"is_active": false,
"is_referenced": false,
"address": "0x00007fff5fbfeab0",
"repeat": 0,
"firesInMsFromNow": 94403548320796,
"expired": true
},
{
"type": "check",
"is_active": true,
"is_referenced": false,
"address": "0x00007fff5fbfeb48"
},
{
"type": "idle",
"is_active": false,
"is_referenced": true,
"address": "0x00007fff5fbfebc0"
},
{
"type": "prepare",
"is_active": false,
"is_referenced": false,
"address": "0x00007fff5fbfec38"
},
{
"type": "check",
"is_active": false,
"is_referenced": false,
"address": "0x00007fff5fbfecb0"
},
{
"type": "async",
"is_active": true,
"is_referenced": false,
"address": "0x000000010188f2e0"
},
{
"type": "tty",
"is_active": false,
"is_referenced": true,
"address": "0x000055b581db0e18",
"width": 204,
"height": 55,
"fd": 17,
"writeQueueSize": 0,
"readable": true,
"writable": true
},
{
"type": "signal",
"is_active": true,
"is_referenced": false,
"address": "0x000055b581d80010",
"signum": 28,
"signal": "SIGWINCH"
},
{
"type": "tty",
"is_active": true,
"is_referenced": true,
"address": "0x000055b581df59f8",
"width": 204,
"height": 55,
"fd": 19,
"writeQueueSize": 0,
"readable": true,
"writable": true
},
{
"type": "loop",
"is_active": true,
"address": "0x000055fc7b2cb180",
"loopIdleTimeSeconds": 22644.8
},
{
"type": "tcp",
"is_active": true,
"is_referenced": true,
"address": "0x000055e70fcb85d8",
"localEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1",
"port": 48986
},
"remoteEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1",
"port": 38573
},
"sendBufferSize": 2626560,
"recvBufferSize": 131072,
"fd": 24,
"writeQueueSize": 0,
"readable": true,
"writable": true
}
],
"workers": [],
"environmentVariables": {
"REMOTEHOST": "REMOVED",
"MANPATH": "/opt/rh/devtoolset-3/root/usr/share/man:",
"XDG_SESSION_ID": "66126",
"HOSTNAME": "test_machine",
"HOST": "test_machine",
"TERM": "xterm-256color",
"SHELL": "/bin/csh",
"SSH_CLIENT": "REMOVED",
"PERL5LIB": "/opt/rh/devtoolset-3/root//usr/lib64/perl5/vendor_perl:/opt/rh/devtoolset-3/root/usr/lib/perl5:/opt/rh/devtoolset-3/root//usr/share/perl5/vendor_perl",
"OLDPWD": "/home/nodeuser/project/node/src",
"JAVACONFDIRS": "/opt/rh/devtoolset-3/root/etc/java:/etc/java",
"SSH_TTY": "/dev/pts/0",
"PCP_DIR": "/opt/rh/devtoolset-3/root",
"GROUP": "normaluser",
"USER": "nodeuser",
"LD_LIBRARY_PATH": "/opt/rh/devtoolset-3/root/usr/lib64:/opt/rh/devtoolset-3/root/usr/lib",
"HOSTTYPE": "x86_64-linux",
"XDG_CONFIG_DIRS": "/opt/rh/devtoolset-3/root/etc/xdg:/etc/xdg",
"MAIL": "/var/spool/mail/nodeuser",
"PATH": "/home/nodeuser/project/node:/opt/rh/devtoolset-3/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin",
"PWD": "/home/nodeuser/project/node",
"LANG": "en_US.UTF-8",
"PS1": "\\u@\\h : \\[\\e[31m\\]\\w\\[\\e[m\\] > ",
"SHLVL": "2",
"HOME": "/home/nodeuser",
"OSTYPE": "linux",
"VENDOR": "unknown",
"PYTHONPATH": "/opt/rh/devtoolset-3/root/usr/lib64/python2.7/site-packages:/opt/rh/devtoolset-3/root/usr/lib/python2.7/site-packages",
"MACHTYPE": "x86_64",
"LOGNAME": "nodeuser",
"XDG_DATA_DIRS": "/opt/rh/devtoolset-3/root/usr/share:/usr/local/share:/usr/share",
"LESSOPEN": "||/usr/bin/lesspipe.sh %s",
"INFOPATH": "/opt/rh/devtoolset-3/root/usr/share/info",
"XDG_RUNTIME_DIR": "/run/user/50141",
"_": "./node"
},
"userLimits": {
"core_file_size_blocks": {
"soft": "",
"hard": "unlimited"
},
"data_seg_size_bytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"file_size_blocks": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_locked_memory_bytes": {
"soft": "unlimited",
"hard": 65536
},
"max_memory_size_bytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"open_files": {
"soft": "unlimited",
"hard": 4096
},
"stack_size_bytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"cpu_time_seconds": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_user_processes": {
"soft": "unlimited",
"hard": 4127290
},
"virtual_memory_bytes": {
"soft": "unlimited",
"hard": "unlimited"
}
},
"sharedObjects": [
"/lib64/libdl.so.2",
"/lib64/librt.so.1",
"/lib64/libstdc++.so.6",
"/lib64/libm.so.6",
"/lib64/libgcc_s.so.1",
"/lib64/libpthread.so.0",
"/lib64/libc.so.6",
"/lib64/ld-linux-x86-64.so.2"
]
}
Verwendung
node --report-uncaught-exception --report-on-signal \
--report-on-fatalerror app.js
--report-uncaught-exception
Aktiviert die Generierung eines Reports bei unbehandelten Ausnahmen. Nützlich bei der Inspektion des JavaScript-Stapels in Verbindung mit dem nativen Stapel und anderen Laufzeitumgebungsdaten.--report-on-signal
Ermöglicht die Erstellung eines Reports beim Empfang des angegebenen (oder vordefinierten) Signals an den laufenden Node.js-Prozess. (Siehe unten, wie das Signal geändert werden kann, das den Report auslöst.) Das Standardsignal istSIGUSR2
. Nützlich, wenn ein Report von einem anderen Programm ausgelöst werden muss. Anwendungsmonitore können diese Funktion nutzen, um Reports in regelmäßigen Abständen zu sammeln und umfangreiche interne Laufzeitdaten in ihren Ansichten darzustellen.
Die signalbasierte Reportgenerierung wird unter Windows nicht unterstützt.
Unter normalen Umständen ist es nicht erforderlich, das Signal zur Auslösung des Reports zu ändern. Wenn jedoch SIGUSR2
bereits für andere Zwecke verwendet wird, hilft dieses Flag, das Signal für die Reportgenerierung zu ändern und die ursprüngliche Bedeutung von SIGUSR2
für die genannten Zwecke beizubehalten.
--report-on-fatalerror
Aktiviert die Auslösung des Reports bei schwerwiegenden Fehlern (internen Fehlern innerhalb der Node.js-Laufzeit, z. B. bei Speichermangel), die zur Beendigung der Anwendung führen. Nützlich, um verschiedene diagnostische Datenelemente wie Heap, Stack, Event-Loop-Status, Ressourcenverbrauch usw. zu untersuchen, um die Ursache des schwerwiegenden Fehlers zu ermitteln.--report-compact
Schreibt Reports in einem kompakten Format, einzeiliges JSON, das von Logverarbeitungssystemen leichter verarbeitet werden kann als das standardmäßige mehrzeilige Format, das für die menschliche Lesbarkeit entwickelt wurde.--report-directory
Speicherort, an dem der Report generiert wird.--report-filename
Name der Datei, in die der Report geschrieben wird.--report-signal
Legt das Signal für die Reportgenerierung fest oder setzt es zurück (wird unter Windows nicht unterstützt). Das Standardsignal istSIGUSR2
.--report-exclude-network
Schließtheader.networkInterfaces
aus und deaktiviert die Reverse-DNS-Abfragen inlibuv.*.(remote|local)Endpoint.host
aus dem Diagnose-Report. Standardmäßig ist dies nicht eingestellt und die Netzwerkschnittstellen sind enthalten.--report-exclude-env
SchließtenvironmentVariables
aus dem Diagnose-Report aus. Standardmäßig ist dies nicht eingestellt und die Umgebungsvariablen sind enthalten.
Ein Report kann auch über einen API-Aufruf von einer JavaScript-Anwendung ausgelöst werden:
process.report.writeReport()
Diese Funktion akzeptiert ein optionales zusätzliches Argument filename
, das der Name einer Datei ist, in die der Report geschrieben wird.
process.report.writeReport('./foo.json')
Diese Funktion akzeptiert ein optionales zusätzliches Argument err
, das ein Error
-Objekt ist, das als Kontext für den im Report gedruckten JavaScript-Stack verwendet wird. Wenn Reports zur Behandlung von Fehlern in einem Callback oder einem Ausnahmehandler verwendet werden, kann der Report so den Ort des ursprünglichen Fehlers sowie den Ort, an dem er behandelt wurde, enthalten.
try {
process.chdir('/nicht-existierender-pfad')
} catch (err) {
process.report.writeReport(err)
}
// Jeglicher weiterer Code
Wenn sowohl Dateiname als auch Fehlerobjekt an writeReport()
übergeben werden, muss das Fehlerobjekt der zweite Parameter sein.
try {
process.chdir('/nicht-existierender-pfad')
} catch (err) {
process.report.writeReport(filename, err)
}
// Jeglicher weiterer Code
Der Inhalt des Diagnose-Reports kann als JavaScript-Objekt über einen API-Aufruf von einer JavaScript-Anwendung zurückgegeben werden:
const report = process.report.getReport()
console.log(typeof report === 'object') // true
// Ähnlich wie bei der Ausgabe von process.report.writeReport()
console.log(JSON.stringify(report, null, 2))
Diese Funktion akzeptiert ein optionales zusätzliches Argument err
, das ein Error
-Objekt ist, das als Kontext für den im Report gedruckten JavaScript-Stack verwendet wird.
const report = process.report.getReport(new Error('benutzerdefinierter Fehler'))
console.log(typeof report === 'object') // true
Die API-Versionen sind nützlich, um den Laufzeitstatus innerhalb der Anwendung zu untersuchen, um den Ressourcenverbrauch, den Lastausgleich, die Überwachung usw. selbst anzupassen.
Der Inhalt des Reports besteht aus einem Header-Abschnitt, der den Ereignistyp, das Datum, die Uhrzeit, die PID und die Node.js-Version enthält, Abschnitten, die JavaScript- und native Stacktraces enthalten, einem Abschnitt, der V8-Heap-Informationen enthält, einem Abschnitt, der libuv
-Handle-Informationen enthält, und einem OS-Plattforminformationsabschnitt, der die CPU- und Speicherauslastung sowie die Systemlimits anzeigt. Ein Beispiel-Report kann mit der Node.js REPL ausgelöst werden:
$ node
> process.report.writeReport();
Schreibt Node.js-Report in Datei: report.20181126.091102.8480.0.001.json
Node.js Report fertiggestellt
>
Wenn ein Report geschrieben wird, werden Start- und Endmeldungen an stderr ausgegeben und der Dateiname des Reports an den Aufrufer zurückgegeben. Der Standarddateiname enthält das Datum, die Uhrzeit, die PID und eine Sequenznummer. Die Sequenznummer hilft bei der Zuordnung des Report-Dumps zum Laufzeitstatus, wenn dieser mehrmals für denselben Node.js-Prozess generiert wird.
Berichtversion
Diagnoseberichte haben eine zugeordnete, einstellige Versionsnummer (report.header.reportVersion
), die das Berichtsformat eindeutig darstellt. Die Versionsnummer wird erhöht, wenn ein neuer Schlüssel hinzugefügt oder entfernt wird, oder wenn sich der Datentyp eines Wertes ändert. Die Definitionen der Berichtversion sind über LTS-Releases hinweg konsistent.
Versionshistorie
Version 5
[Historie]
Version | Änderungen |
---|---|
v23.5.0 | Fehler in den Einheiten für den Arbeitsspeicher behoben. |
Ersetzen Sie die Schlüssel data_seg_size_kbytes
, max_memory_size_kbytes
und virtual_memory_kbytes
durch data_seg_size_bytes
, max_memory_size_bytes
bzw. virtual_memory_bytes
im Abschnitt userLimits
, da diese Werte in Byte angegeben werden.
{
"userLimits": {
// Einige Schlüssel überspringen ...
"data_seg_size_bytes": {
// ersetzt data_seg_size_kbytes
"soft": "unlimited",
"hard": "unlimited"
},
// ...
"max_memory_size_bytes": {
// ersetzt max_memory_size_kbytes
"soft": "unlimited",
"hard": "unlimited"
},
// ...
"virtual_memory_bytes": {
// ersetzt virtual_memory_kbytes
"soft": "unlimited",
"hard": "unlimited"
}
}
}
Version 4
[Historie]
Version | Änderungen |
---|---|
v23.3.0 | Option --report-exclude-env hinzugefügt, um Umgebungsvariablen von der Berichtserstellung auszuschließen. |
Neue Felder ipv4
und ipv6
werden zu den Endpunkten der tcp
- und udp
-Libuv-Handles hinzugefügt. Beispiele:
{
"libuv": [
{
"type": "tcp",
"is_active": true,
"is_referenced": true,
"address": "0x000055e70fcb85d8",
"localEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1", // neuer Schlüssel
"port": 48986
},
"remoteEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1", // neuer Schlüssel
"port": 38573
},
"sendBufferSize": 2626560,
"recvBufferSize": 131072,
"fd": 24,
"writeQueueSize": 0,
"readable": true,
"writable": true
},
{
"type": "tcp",
"is_active": true,
"is_referenced": true,
"address": "0x000055e70fcd68c8",
"localEndpoint": {
"host": "ip6-localhost",
"ip6": "::1", // neuer Schlüssel
"port": 52266
},
"remoteEndpoint": {
"host": "ip6-localhost",
"ip6": "::1", // neuer Schlüssel
"port": 38573
},
"sendBufferSize": 2626560,
"recvBufferSize": 131072,
"fd": 25,
"writeQueueSize": 0,
"readable": false,
"writable": false
}
]
}
Version 3
[Verlauf]
Version | Änderungen |
---|---|
v19.1.0, v18.13.0 | Weitere Speicherinformationen hinzugefügt. |
Die folgenden Schlüssel zur Speichernutzung wurden dem Abschnitt resourceUsage
hinzugefügt.
{
"resourceUsage": {
"rss": "35766272",
"free_memory": "1598337024",
"total_memory": "17179869184",
"available_memory": "1598337024",
"constrained_memory": "36624662528"
}
}
Version 2
[Verlauf]
Version | Änderungen |
---|---|
v13.9.0, v12.16.2 | Worker sind jetzt im Bericht enthalten. |
Worker
-Unterstützung hinzugefügt. Weitere Informationen finden Sie im Abschnitt Interaktion mit Workern.
Version 1
Dies ist die erste Version des Diagnoseberichts.
Konfiguration
Eine zusätzliche Laufzeitkonfiguration der Berichtserstellung ist über die folgenden Eigenschaften von process.report
verfügbar:
reportOnFatalError
löst die Diagnoseberichterstellung bei schwerwiegenden Fehlern aus, wenn true
. Standardmäßig ist false
.
reportOnSignal
löst die Diagnoseberichterstellung bei einem Signal aus, wenn true
. Dies wird unter Windows nicht unterstützt. Standardmäßig ist false
.
reportOnUncaughtException
löst die Diagnoseberichterstellung bei einer nicht abgefangenen Ausnahme aus, wenn true
. Standardmäßig ist false
.
signal
gibt den POSIX-Signalbezeichner an, der verwendet wird, um externe Auslöser für die Berichtserstellung abzufangen. Standardmäßig ist 'SIGUSR2'
.
filename
gibt den Namen der Ausgabedatei im Dateisystem an. stdout
und stderr
haben eine besondere Bedeutung. Ihre Verwendung führt dazu, dass der Bericht in die zugehörigen Standardstreams geschrieben wird. In Fällen, in denen Standardstreams verwendet werden, wird der Wert in directory
ignoriert. URLs werden nicht unterstützt. Standardmäßig wird ein zusammengesetzter Dateiname verwendet, der Zeitstempel, PID und Sequenznummer enthält.
directory
gibt das Dateisystemverzeichnis an, in das der Bericht geschrieben wird. URLs werden nicht unterstützt. Standardmäßig ist das aktuelle Arbeitsverzeichnis des Node.js-Prozesses.
excludeNetwork
schließt header.networkInterfaces
aus dem Diagnosebericht aus.
// Bericht nur bei nicht abgefangenen Ausnahmen auslösen.
process.report.reportOnFatalError = false
process.report.reportOnSignal = false
process.report.reportOnUncaughtException = true
// Bericht sowohl bei internen Fehlern als auch bei externem Signal auslösen.
process.report.reportOnFatalError = true
process.report.reportOnSignal = true
process.report.reportOnUncaughtException = false
// Das Standard-Signal auf 'SIGQUIT' ändern und aktivieren.
process.report.reportOnFatalError = false
process.report.reportOnUncaughtException = false
process.report.reportOnSignal = true
process.report.signal = 'SIGQUIT'
// Netzwerk-Interface-Berichterstattung deaktivieren
process.report.excludeNetwork = true
Eine Konfiguration bei der Modulinitialisierung ist auch über Umgebungsvariablen möglich:
NODE_OPTIONS="--report-uncaught-exception \
--report-on-fatalerror --report-on-signal \
--report-signal=SIGUSR2 --report-filename=./report.json \
--report-directory=/home/nodeuser"
Spezifische API-Dokumentationen finden Sie im Abschnitt process API documentation
.
Interaktion mit Workern
[Historie]
Version | Änderungen |
---|---|
v13.9.0, v12.16.2 | Worker sind jetzt im Bericht enthalten. |
Worker
-Threads können Berichte auf die gleiche Weise erstellen wie der Haupt-Thread.
Berichte enthalten Informationen zu allen Workern, die Kinder des aktuellen Threads sind, im Abschnitt workers
, wobei jeder Worker einen Bericht im Standardberichtsformat generiert.
Der Thread, der den Bericht generiert, wartet, bis die Berichte von Worker-Threads abgeschlossen sind. Die Latenz hierfür ist jedoch normalerweise gering, da sowohl die Ausführung von JavaScript als auch die Ereignisschleife unterbrochen werden, um den Bericht zu generieren.