Skip to content

진단 보고서

[안정성: 2 - 안정]

안정성: 2 안정성: 2 - 안정

[기록]

버전변경 사항
v23.3.0보고서 생성에서 환경 변수를 제외하는 --report-exclude-env 옵션이 추가되었습니다.
v22.0.0, v20.13.0일부 경우 보고서 생성을 느리게 할 수 있는 네트워킹 작업을 제외하는 --report-exclude-network 옵션이 추가되었습니다.

파일에 JSON 형식의 진단 요약을 제공합니다.

이 보고서는 문제 확인을 위해 정보를 캡처하고 보존하기 위한 개발, 테스트 및 프로덕션용입니다. 여기에는 JavaScript 및 네이티브 스택 추적, 힙 통계, 플랫폼 정보, 리소스 사용량 등이 포함됩니다. 보고서 옵션을 활성화하면 API 호출을 통해 프로그래밍 방식으로 트리거하는 것 외에도 처리되지 않은 예외, 치명적인 오류 및 사용자 신호에 대해 진단 보고서를 트리거할 수 있습니다.

참조용으로 아래에 처리되지 않은 예외에서 생성된 전체 예제 보고서가 제공됩니다.

json
{
  "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"
  ]
}

사용법

bash
node --report-uncaught-exception --report-on-signal \
--report-on-fatalerror app.js
  • --report-uncaught-exception 예외 처리되지 않은 예외 발생 시 보고서 생성을 활성화합니다. 네이티브 스택 및 기타 런타임 환경 데이터와 함께 JavaScript 스택을 검사할 때 유용합니다.
  • --report-on-signal 실행 중인 Node.js 프로세스에 지정된 (또는 미리 정의된) 신호를 수신할 때 보고서 생성을 활성화합니다. (보고서를 트리거하는 신호를 수정하는 방법은 아래 참조) 기본 신호는 SIGUSR2입니다. 다른 프로그램에서 보고서를 트리거해야 하는 경우 유용합니다. 애플리케이션 모니터는 이 기능을 활용하여 정기적인 간격으로 보고서를 수집하고 풍부한 내부 런타임 데이터 세트를 뷰에 플롯할 수 있습니다.

신호 기반 보고서 생성은 Windows에서 지원되지 않습니다.

일반적인 상황에서는 보고서 트리거 신호를 수정할 필요가 없습니다. 그러나 SIGUSR2가 이미 다른 용도로 사용되는 경우 이 플래그는 보고서 생성을 위한 신호를 변경하고 해당 목적에 대한 SIGUSR2의 원래 의미를 보존하는 데 도움이 됩니다.

  • --report-on-fatalerror 애플리케이션 종료로 이어지는 치명적인 오류(메모리 부족과 같은 Node.js 런타임 내의 내부 오류)에서 보고서를 트리거하도록 활성화합니다. 힙, 스택, 이벤트 루프 상태, 리소스 소비 등과 같은 다양한 진단 데이터 요소를 검사하여 치명적인 오류에 대해 추론하는 데 유용합니다.
  • --report-compact 보고서를 사람이 소비하도록 설계된 기본 다중 라인 형식보다 로그 처리 시스템에서 더 쉽게 사용할 수 있는 압축 형식(단일 라인 JSON)으로 작성합니다.
  • --report-directory 보고서가 생성될 위치입니다.
  • --report-filename 보고서가 기록될 파일 이름입니다.
  • --report-signal 보고서 생성에 대한 신호를 설정하거나 재설정합니다(Windows에서는 지원되지 않음). 기본 신호는 SIGUSR2입니다.
  • --report-exclude-network header.networkInterfaces를 제외하고 진단 보고서에서 libuv.*.(remote|local)Endpoint.host의 역방향 DNS 쿼리를 비활성화합니다. 기본적으로 설정되어 있지 않으며 네트워크 인터페이스가 포함됩니다.
  • --report-exclude-env 진단 보고서에서 environmentVariables를 제외합니다. 기본적으로 설정되어 있지 않으며 환경 변수가 포함됩니다.

JavaScript 애플리케이션의 API 호출을 통해 보고서를 트리거할 수도 있습니다.

js
process.report.writeReport()

이 함수는 보고서가 작성되는 파일 이름인 선택적 추가 인수 filename을 사용합니다.

js
process.report.writeReport('./foo.json')

이 함수는 보고서에 출력된 JavaScript 스택의 컨텍스트로 사용될 Error 객체인 선택적 추가 인수 err을 사용합니다. 콜백 또는 예외 처리기에서 오류를 처리하기 위해 보고서를 사용할 때 보고서에 원래 오류 위치와 처리된 위치를 모두 포함할 수 있습니다.

js
try {
  process.chdir('/non-existent-path')
} catch (err) {
  process.report.writeReport(err)
}
// Any other code

파일 이름과 오류 객체가 모두 writeReport()에 전달되면 오류 객체는 두 번째 매개변수여야 합니다.

js
try {
  process.chdir('/non-existent-path')
} catch (err) {
  process.report.writeReport(filename, err)
}
// Any other code

진단 보고서의 내용은 JavaScript 애플리케이션의 API 호출을 통해 JavaScript 객체로 반환될 수 있습니다.

js
const report = process.report.getReport()
console.log(typeof report === 'object') // true

// Similar to process.report.writeReport() output
console.log(JSON.stringify(report, null, 2))

이 함수는 보고서에 출력된 JavaScript 스택의 컨텍스트로 사용될 Error 객체인 선택적 추가 인수 err을 사용합니다.

js
const report = process.report.getReport(new Error('custom error'))
console.log(typeof report === 'object') // true

API 버전은 리소스 소비, 로드 밸런싱, 모니터링 등을 자체 조정하기 위해 애플리케이션 내에서 런타임 상태를 검사할 때 유용합니다.

보고서 내용은 이벤트 유형, 날짜, 시간, PID 및 Node.js 버전이 포함된 헤더 섹션, JavaScript 및 네이티브 스택 추적 정보가 포함된 섹션, V8 힙 정보가 포함된 섹션, libuv 핸들 정보가 포함된 섹션, CPU 및 메모리 사용량과 시스템 제한을 보여주는 OS 플랫폼 정보 섹션으로 구성됩니다. Node.js REPL을 사용하여 예제 보고서를 트리거할 수 있습니다.

bash
$ node
> process.report.writeReport();
Writing Node.js report to file: report.20181126.091102.8480.0.001.json
Node.js report completed
>

보고서가 작성되면 시작 및 종료 메시지가 stderr에 발행되고 보고서의 파일 이름이 호출자에게 반환됩니다. 기본 파일 이름에는 날짜, 시간, PID 및 시퀀스 번호가 포함됩니다. 시퀀스 번호는 동일한 Node.js 프로세스에 대해 여러 번 생성된 경우 보고서 덤프를 런타임 상태와 연결하는 데 도움이 됩니다.

보고서 버전

진단 보고서에는 보고서 형식을 고유하게 나타내는 한 자리 버전 번호(report.header.reportVersion)가 연결되어 있습니다. 새 키가 추가되거나 제거되거나 값의 데이터 유형이 변경되면 버전 번호가 올라갑니다. 보고서 버전 정의는 LTS 릴리스 전체에서 일관됩니다.

버전 기록

버전 5

[기록]

버전변경 사항
v23.5.0메모리 제한 단위의 오타를 수정합니다.

userLimits 섹션에서 data_seg_size_kbytes, max_memory_size_kbytesvirtual_memory_kbytes 키를 각각 바이트 단위로 제공되는 값인 data_seg_size_bytes, max_memory_size_bytesvirtual_memory_bytes로 바꿉니다.

json
{
  "userLimits": {
    // 일부 키 건너뛰기 ...
    "data_seg_size_bytes": {
      // data_seg_size_kbytes 교체
      "soft": "unlimited",
      "hard": "unlimited"
    },
    // ...
    "max_memory_size_bytes": {
      // max_memory_size_kbytes 교체
      "soft": "unlimited",
      "hard": "unlimited"
    },
    // ...
    "virtual_memory_bytes": {
      // virtual_memory_kbytes 교체
      "soft": "unlimited",
      "hard": "unlimited"
    }
  }
}

버전 4

[기록]

버전변경 사항
v23.3.0보고서 생성에서 환경 변수를 제외하기 위한 --report-exclude-env 옵션이 추가되었습니다.

새 필드 ipv4ipv6tcpudp libuv 핸들 엔드포인트에 추가됩니다. 예시:

json
{
  "libuv": [
    {
      "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
    },
    {
      "type": "tcp",
      "is_active": true,
      "is_referenced": true,
      "address": "0x000055e70fcd68c8",
      "localEndpoint": {
        "host": "ip6-localhost",
        "ip6": "::1", // 새 키
        "port": 52266
      },
      "remoteEndpoint": {
        "host": "ip6-localhost",
        "ip6": "::1", // 새 키
        "port": 38573
      },
      "sendBufferSize": 2626560,
      "recvBufferSize": 131072,
      "fd": 25,
      "writeQueueSize": 0,
      "readable": false,
      "writable": false
    }
  ]
}

버전 3

[기록]

버전변경 사항
v19.1.0, v18.13.0더 많은 메모리 정보 추가.

다음 메모리 사용량 키가 resourceUsage 섹션에 추가되었습니다.

json
{
  "resourceUsage": {
    "rss": "35766272",
    "free_memory": "1598337024",
    "total_memory": "17179869184",
    "available_memory": "1598337024",
    "constrained_memory": "36624662528"
  }
}

버전 2

[기록]

버전변경 사항
v13.9.0, v12.16.2이제 보고서에 워커가 포함됩니다.

Worker 지원이 추가되었습니다. 자세한 내용은 워커와의 상호 작용 섹션을 참조하십시오.

버전 1

진단 보고서의 첫 번째 버전입니다.

구성

보고서 생성에 대한 추가 런타임 구성은 process.report의 다음 속성을 통해 사용할 수 있습니다.

reportOnFatalErrortrue일 때 치명적인 오류에 대한 진단 보고를 트리거합니다. 기본값은 false입니다.

reportOnSignaltrue일 때 신호에 대한 진단 보고를 트리거합니다. Windows에서는 지원되지 않습니다. 기본값은 false입니다.

reportOnUncaughtExceptiontrue일 때 잡히지 않은 예외에 대한 진단 보고를 트리거합니다. 기본값은 false입니다.

signal은 보고서 생성을 위한 외부 트리거를 가로채는 데 사용될 POSIX 신호 식별자를 지정합니다. 기본값은 'SIGUSR2'입니다.

filename은 파일 시스템에서 출력 파일 이름을 지정합니다. stdoutstderr에는 특별한 의미가 부여됩니다. 이를 사용하면 관련 표준 스트림에 보고서가 작성됩니다. 표준 스트림이 사용되는 경우 directory의 값은 무시됩니다. URL은 지원되지 않습니다. 기본값은 타임스탬프, PID 및 시퀀스 번호를 포함하는 합성 파일 이름입니다.

directory는 보고서가 작성될 파일 시스템 디렉토리를 지정합니다. URL은 지원되지 않습니다. 기본값은 Node.js 프로세스의 현재 작업 디렉토리입니다.

excludeNetwork는 진단 보고서에서 header.networkInterfaces를 제외합니다.

js
// 잡히지 않은 예외에 대해서만 보고서를 트리거합니다.
process.report.reportOnFatalError = false
process.report.reportOnSignal = false
process.report.reportOnUncaughtException = true

// 내부 오류와 외부 신호 모두에 대해 보고서를 트리거합니다.
process.report.reportOnFatalError = true
process.report.reportOnSignal = true
process.report.reportOnUncaughtException = false

// 기본 신호를 'SIGQUIT'로 변경하고 활성화합니다.
process.report.reportOnFatalError = false
process.report.reportOnUncaughtException = false
process.report.reportOnSignal = true
process.report.signal = 'SIGQUIT'

// 네트워크 인터페이스 보고를 비활성화합니다.
process.report.excludeNetwork = true

모듈 초기화 시 구성은 환경 변수를 통해서도 사용할 수 있습니다.

bash
NODE_OPTIONS="--report-uncaught-exception \
  --report-on-fatalerror --report-on-signal \
  --report-signal=SIGUSR2  --report-filename=./report.json \
  --report-directory=/home/nodeuser"

특정 API 문서는 process API documentation 섹션에서 찾을 수 있습니다.

워커와의 상호 작용

[기록]

버전변경 사항
v13.9.0, v12.16.2이제 보고서에 워커가 포함됩니다.

Worker 스레드는 메인 스레드와 같은 방식으로 보고서를 생성할 수 있습니다.

보고서에는 현재 스레드의 자식인 모든 워커에 대한 정보가 workers 섹션의 일부로 포함되며, 각 워커는 표준 보고서 형식으로 보고서를 생성합니다.

보고서를 생성하는 스레드는 워커 스레드의 보고서가 완료될 때까지 기다립니다. 그러나 JavaScript 실행과 이벤트 루프가 모두 보고서를 생성하기 위해 중단되기 때문에 이 대기 시간은 일반적으로 짧습니다.