Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doc: add abnormal termination step 1 #344

Merged
merged 2 commits into from Jan 20, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -1 +1,45 @@
//TODO
# Using Exit Stack Traces for Debugging

`--trace-exit` CLI option will print a stack trace on every proactive
`process.exit` invocation. It is convenient to confirm if the abnormal exit of
the process was initiated from an invocation of `process.exit` or something
other crashes.

> Caveat:
> `--trace-exit` CLI option is available since Node.js v13.5.0.

## How To

There are conditions that we used an third party library that we have trivial
knowledge of the implementation details. It is hard to determine where the exit
is trigger in which library in these conditions. On the first step we have to
determine if it is a proactive `process.exit` invocation and where it is to
prevent follow up not trivial work of detailed digging the exit reasons.

The simple step is to add an option `--trace-exit` on starting the Node.js
process. Since then, we can see a stacktrace on each call of `process.exit`.

```bash
> node --trace-exit src/abnormal-exit.js
(node:26480) WARNING: Exited the environment with code 0
at exit (internal/process/per_thread.js:168:13)
at /node_modules/some-obscure-library:199:32 # this is the actual location.
at Module._compile (internal/modules/cjs/loader.js:1139:30)
at Module._extensions..js (internal/modules/cjs/loader.js:1159:10)
at Module.load (internal/modules/cjs/loader.js:988:32)
at Module._load (internal/modules/cjs/loader.js:896:14)
at executeUserEntryPoint (internal/modules/run_main.js:71:12)
```

With the knowledge of where the calls of `process.exit` is, we can check around
the invocation to understand the reasons and prevent it from abnormal exits.

If the process doesn't output a stack trace on exit, we can come to a
conclusion that the process exited for other reasons, and we
can deploy strategy according to the [abnormal termination guides on common symptoms].

## Useful Links

- https://nodejs.org/docs/latest/api/cli.html#cli_trace_exit

[abnormal termination guides on common symptoms]: ../README.md#Common_Symptoms