Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Throw Me a Lifebuoy: Debugging Node.js in Produ...

Throw Me a Lifebuoy: Debugging Node.js in Production w/ Diagnostic Reports

Ever needed to debug a running process in production, or collect exception metrics? Node's diagnostic reports enables just that, without needing to expose a debug port. I'll show you how to use this new feature--and some neat tooling that it enables.

Avatar for Christopher Hiller

Christopher Hiller

October 17, 2019
Tweet

More Decks by Christopher Hiller

Other Decks in Programming

Transcript

  1. • Experimental! • Added in Node.js v11.7.0 • A bulging

    JSON dump reflecting the state of the process • Based on userland package: node-report • A few different ways to trigger generation • A plethora of ways to use the information
  2. `;~: `^~` ';~ ~J, ||;'~~~ ';?;~;}, ~;~~;!. ?J ~~^; `;!~*j\zf,^7Y~,,,=j=~=fY7i~~;:

    :;;~;!^`!}}Ssu`_*\i<=',iuhjj`,?*~~;~. ',~;^si^|^;;;=U,`_sJ<Z?~~;uyt=}~ iy;^<!r<=uT!~:~,` `,;!^+=rr^r+=**||?<<iiiYZsii7sTss;,,,;Qz**y.`?``,~. '~ `T}=Wf:'~~=u}y}\i*L7J7Ti?<i\?==r+*<<<+^^;,` .~~_~~;^!!;~:,,~~'`'^?iiL|L=;<T!|YhqDQqoY;jo*7!~;^;_+|!w\iwuggUEZzr^i*||L*r<|*;,.,~~~~~~~;!^^^!;:` _;!^=*|L|iLL*<=++<Li*<|;~*|7^|=i|~_~<U|`,;; .;;,=zf~~;<7=z=\7|,,+i*^<i\|?*<=<<<<<=!;:'` ~;~,,,,~~~;;;;~::,',~!=Lit7tf7;~. `=j=:+. ;!;|Y_ _~<}jJ7i<|=!;~~,_~~;;^^^;;;_,.` `.:!=?||*=+<**==*\|<=*?|=^;:,+zzmhKi`,; `,'.~~~;~',,` _=`;X6o<zi;,~;^^<r<?iL=<<*<=***Lii*=!~` `',:~~~~~~~~~~:~~~~~~;=\zuUbqs7uY^r!~; ,' ^|r;;' ,;;~Y~`,`'~;^L\fT\aKEs7\L^;~~:_~~~~;;!==+r!~,'` .:;^<*<==<<<Li\|*i??\=!~;_~}};~!r^;;s|EDJ!=y}L|<}Lf*;;UD*z=~r;;~~?yi~<!~=\i|Li*=<?||Li\i\iL?<+^: `',;+*iTL|<^||\iLiiTT\iiJsj\|^;uz*;' :EL;,,!|wr ,uy?;,!ry^ `;=TS<~^*T\i<r|iL=<<?i+;!!^^r=^;~,. '~~~^<|7\|*<*=<=<?<!~~!;;^\<*tfi!i}}sur` <S\!i|!^+\<^EZ' ^}j7sT^^jj*+i*=!~__,_^|Tir!^^r+=+!;:'` `~~~;;;!^r^++=?\iLL|**Ti7JJTs<<q%QEmZ;Xyjs='iTYJ_!;^<j|~Lyto?YNaQQgf?YzT77T*L*|||iiiii|LL|=~'.` `,:~;!^+=r^r^=<?iTL^~~!zz7zUEtD}!!LoWh<7QEUXDi^ ;jhRQK^hb6y7|=DWumYizz7;,'~=*LT\|=r^;~,,''''` ``.,~;^*?<<|<?|?=!;^+^:~7|;~,|i~+<. ^KUfz`,?; ,?` ,ifK*.'^^~+f^,;is^~:^+;=*=|TT?*=^;;~__,.`` ``,~;+*|ii\ii?|LT\?;~,=iT\!rtg6!TiTtJb= `;+'^^~~~=`~+; .Saz\<|!+#qJ^*JT\=;!r<<LTT??|?ii|L|<=+;' `.',~;!!^^!^;:~!;~!??^=|?|7J7|!tY+XQQ*. `;;;;~;~~, .,!*Q@DJ<o^!i?zT^;=T\<<|==^^==*?+!!;_,''. ,!~,_~~;^;;;;;;;;^^;r**77Jr:_<7wJkXJY^;t;;=` ,~ .r' `T}=z~`^ajWmYT^^~~=*i<=+~.',;;;;;~;!^+r;~;;~ `,_;;r=<**?LLTTT|?++^~,_;LzziiwgS^;,~~JmfZumu7|+~jYUjJX\si;_,,~^Uhf|77zL~~;*<+=\T\**?<==<*?<=^;,` `.',:~~~~~~~~~~_,:,~~~;^|^~=tbJ, ;;,`;i|_:~:7y=+;r<*!``__m+_';!.`!ZQm=;<?;~,',~~~_~~~^+<*|?<+^^;, ,!=*|||*<===*=+r<LT\iL|<|LJSu;';~!'`^:`;sjUaR; `Yquoti`'=,`;;~`'<fj|\|<*?TTL*=^^<*|**<^~,.`` `'~;!!!^;;!;;;;~:~~~~~~!i<|;_~=+~*mZ' mk`^=;%z!~;;^;^df;|:~q` 7Ui~~^;;~^<<|*;,~~~~~;;;!;;;;~,'..'` ,!!^r<*L|*=<*<*ii7i|\Lr!zEjL*7mRUZ= `|U!!~?Y^=Za<i7wj=?f*;;KR, ;a6ggf7<iz}}\+;!?\||*r=***<<|*=r;:` `'_;^r<=^^^!!=L\i<==*i*\=*T*^jkL~,~}|~<;T;. ,;~;. 'y|\^?oz~~;sdysL*^^iL?r|T\i|<^^;;~~~~~~~~, `~;!=*??***<^=iTT**|\*\JTt*;r!~;~i}XyJ'~? `r7r;;~~~;^\L!``Y`=Yjkyr~;~^!r|7i7*!!=\\|?**?*<<*<*<r^;, .~;;;;;~^^!r==+;;^!^=|i=~_~^iz=|wi;; jojkaZz?! `.;\zaiD; `!;}u=zz*~~,~r?<^=TL||||<=<**^!;~,'` ,*TL?Li7z7zz77T|=r=|LiTiztJiYY^;` ^!J*Y, `, _=;`;|=^^^;i\!rL~ ,^*kzT777=;;^|TTTTTT|*???+!;_'` `.',~;;^^^!;;^=|L*?*|\i<+|i+\r;TifjL: '<= ,!,. .r: ruys\L!LTTT7Y\\L=<i<=<*<<+^^^^^!~:'` ,*i*=<|i|L*=r^+*iT*;+|??|*~_~~izEoL!;^!}k*o6J;, ,<omisz^^;;!|kS*L;_~~?i\=~!^?||?*LL*<<<<==!;:` .,~;!!!^!!;;;;!;!!|**=~,_,,~JKXj_ `*6Uj}7!=s8jZZsdy7=ifuoBJ; .+sjmT,:~:~^?*|*<+!;;;;!^^;~~_,.` `.',,~~;!^^!!!!;~_,!?|*7|<*^^+^?ti~!;,=~t\yJ' ^hTz\!=~|!+7z^|?r~\zTz7|!;;;::~;;~~~~~~;~_,'` `'_;!;^=*?Li?<|T*r;~^=~~^*\ykz*` ;=tiqjJ; ,DaD};L+. ,tUXtir~~^;;!<i*+!!^^!!^^==|i\|;` `,~~;!;~~~~_~_:_~~,:;;^*||7<~'_^zymqas=<~;;~ *z. ;+~,+;RjwfmJ<~~~^ii<+<^r<^;:;;;;!;;!^^++r;:'` `'~;;!^^!;^r^!~;!=|Li*iiLTj777iL7jX*j?L^7?=`^*<q@bQTt7 ~=ii*^juf8U}*Yt7z+;=?*<=|\T|*==<i7777\|<^~` .',~;;;;;~_,,'':~~:,_!!r=;~zYUaS*;ms|T7sL}Y}XBD' +8gkfu?zzys^jz^EUUUY<<z\?;~~~~~~~~_~~~!!!;!!;:.` `,;=*Lii||*<=r^=<\Ti*!;=;;Tai!7r;*ooTERW%Djbs ..`, ~,.UZwkERSk7ww*+<z=u7=;**<==<<==+r+r=<<<**=^!;~ `',~~;!!!!;~_,,::~~~;!=*7i;^Jzuo|,~|yy7.^^X@7++=;!^r6g\,*;TW?7.;sh7jz;^zt?;~~~~~~;~;;~~~_~;;;~' `,~!+<<<=+<+<||*=|*^~r|77TTJSu<,,;|ZRh! 7QKZ!==Zuj,`` ~mBkz~~:~zqj7\\Lz}?!^<L\LLLL|*<r^;;~~~_ `'_;^=**r~~~~;;=|*^=|T|^~<*TzrLTiia&h* `;^;+kNj*=<*\a^!*~ ,zgyY|Ti\*fti~;|*=;'~+Li||i|*=+!;~''` `,~;^<<*<==rrrr**;__*|<|<+;~~;;;rztf' !;ay~ ,;=}J7^~` <u?*.`ia||~~;;~;|=?**|;,~=Li||||||i|iiL|r, '~~~~;^;;;^??L<;,_=|L||<=;`:z\|<*yo|7i!Zz?q= ,7' ;| 'Z}?Y^JuyzEk<^\7<,'~=*<<|?^?|======<<**+!;,` `;rr=*LTi|**|i|!,,~~,,=ii^;=||uXDD7=``ug^~=i;*EZyJyDK;z<<;hD+ ;zo#%fo*7|<|*^~:,~;iL**?|ii\77\L<^~. `,_~~;!!;;!!=?iT=;==*i|L^_;ztiu+' !*Sz_`^!.'.~ `;```i`,^qYL` ~Ta7j*;<L?<|*<<=<<r!;;;;r=+^!^!;, `~+?|i|?*<==+=<?\=!~,:~~~:~;!<Y!7|^!Ey*~;` |Ui;sk77z*fq~ ';\Zh\+7u*?y^7L;~~~~~*L+=?**<|*+^=<=^;;;, `.,~;;!rr==<<|L|LTiii7TtkbqUjJ^yYijK= z.`;;'^J^; `~` ';. ;~_oU7Jki=t\Y}z}zT<!!*LiTTTTiL*+!;~,'. ``',_~;^!!!;;~,.'~rr!Li|<+^JUgosyT~!<,~!7Sw!!~;^!;*=|7qy|;,;+!^isYgWS7*=*|??|<^~:~~~,,,,,,_~~~,'` '~~~;;r<=***=^^=*T\iiL*;~*iYYi!;^;rY\jjq<<z!i7r;|?;;Lj|~j?uwhYLt+=~~^JoJ?^~=||<<L\L<^;;^^r==+;~,'` '~,''',,:_:,:,,,~*i?^||7Li;;;=<=t?Lft6^*kt<: ;|` ~T;,+Ls7;f%7\r\L;=^~;;?77\i*=;:_:~~~;^r+!;~,'` .,~;!^r+=+=<*ii|iLr~_~~;^izt|~|+;;7q;oh, 'w^<~7' +^|;|o, ^w~j%|;;<;~??L=;~,~+!^iTTL+!^!!r==<*r;~. `':~;;;~~~~,:::,,~~~:'~?|i^~~;?7YwRQis!`;z%%?;m!|z!=!~<KQX,;b=RQdaa7!~;;=|*!~,',~:,,,,~;;;;;;,.`` '~~~;^*i7Ti|*<?L?*<||\TsiL7uuksft!_,='TDR*^|fdDQ^,7}DgRarq@7:^~';zSuEZtsi|TTiii7TL<+r<<<**|??<++!, `.',,~~~!!!!+iTTT|*^*i?JfJ7z\!~;;;i}\fQg=;,~,<+` `,,,``'oR#yhk=;<;;i7z\jaii|;;<iTi*r;~~~^r!;_''` ,^;;!^<*?==^+|iTTi*^;r\7\=~,,!fk\7j;;}7,;T<?;` ,;. ;*z6h~!E7~zRzSki;,_~*7T=~_~=iTT\*====<?L*r;~. `',_~:~~;~;;;!r=|i<LL<_;?=?JEb<!L~;ti~qRr7y}j;^L=t~uZz~_t%|,}<;^<^}6f7i<;~*LL+ri\?=<=!;~~~_,,'.` `'~;^==<**<=<*<*<;;,,^|L<|*;;!,:!+~~^<Qu;=: `^<J~`,uX!~;i;^q}^;^^=^,'~,;?|<**=,,*\*?L*=+^+<?L|ii=, ';^r^^^!^!=*<*?|LL^^L7Li^_,'~~|;~~~;7}7}^7?,_~` ,;=,`~_^t+<}?hL!,~_^;,~:,,,^*\?r<?=!;!~;!!^;~,'.`` ';=<**|L\TiL|?<*Li!,,~~!<|i\i*!;=wqfz7='YL ,i '\. .;Ur;YayKhy^*?L!=<=!__,,^\?<+<<=<<<<=^;~,'` `'~^*iTi\i?*<*|<L|*L777|;~rT7*idRdu^;`jZu^;|!,~k\;io';<+;;jU,'^^6QQ6<L\7*~;+*<<rr<*?||Liiii|||=^~` '~,,,~~~____::~~~,,;*L|<|iLstt7J\*~'~jSj;;;;!=Z+}Z|Tj!;;;r<qj*~~~+Jotzt7777Ti\*r;~_:_~~~~~~~~~~,'` `':;^=*<*||<<?|\TTi*+<|!~;*7^~77Jay7ZjDYwr;;~S;|L7|Sy! .~\aqXTXuy*|y?~^z^~_~^|<=|TTi**?|ii|*+;~,` `.',,_~_,:::,,~~~~,:,~!i77=*f\;;!^^i#i!` ~^` `~|<+~`'i#E***;;!J7^<i\i*r;~:,,,,_~~~~~~~_~::_~` `'_;!^=<<<<<<<iTT|^^=*i7*~;|i^_~~!jQi `;, 'Qg^~;~=|i^~~_^||?|L<<=====<**<=+r;~,` `.,~;~~~_,,,::,,~::~_;<T7JzY\tfJudN+ ,z'~^~^!,,` `~;T! `qQkszs\zzz7zi=^~~:_~~,:_~~~~~;;~~,.` '~;r<?||LiiiL|?<=;;*L**|;~<7i7*<zY+;=~!j=;~, :KyiTU;~:~!7*;^;;7Yj!LzJsi~;*iiTi|**?<<?L|Li\L<!~,'` `,_~;;!r=<*||||L77|=|7T***^~*7LLi6zT;~~ `'`._~_`~,` ';_*JY}|y\T^;;77T\L<*|ii|||i*=+^!;,,'`` `':;;!r<*??L?***\\*;,';77zuaXUqui~` ,~zyqqEzszz=~~~;+=ii*<?|?||iii*=^^!, '~~~~~;!!^<*?|TTT\i|<!**i^=T\z^` `rfz7\?||<r^^+iT|<=rr=+r!;~~,'` '~;!^++==<**?||\TTLr;~~,,~. `:_,';|*=<*|*|iTTT7T|<r!~~~.
  3. {"header":{"event":"JavaScript API","trigger":"API","filename":"report.20190429.123135.45164.0.001. json","dumpEventTime":"2019-04-29T12:31:35Z","dumpEventTimeStamp":"1556566295950","processId":45164 ,"cwd":"/Users/boneskull/projects/christopher-hiller/report-toolkit","commandLine":["node","--exper imental-report","-e","process.report.writeReport()"],"nodejsVersion":"v12.1.0","wordSize":64,"arch" :"x64","platform":"darwin","componentVersions":{"node":"12.1.0","v8":"7.4.288.21-node.16","uv":"1.2 8.0","zlib":"1.2.11","brotli":"1.0.7","ares":"1.15.0","modules":"72","nghttp2":"1.38.0","napi":"4", "llhttp":"1.1.1","http_parser":"2.8.0","openssl":"1.1.1b","cldr":"35.1","icu":"64.2","tz":"2019a"," unicode":"12.1"},"release":{"name":"node","headersUrl":"https://nodejs.org/download/release/v12.1.0 /node-v12.1.0-headers.tar.gz","sourceUrl":"https://nodejs.org/download/release/v12.1.0/node-v12.1.0

    .tar.gz"},"osName":"Darwin","osRelease":"18.5.0","osVersion":"Darwin Kernel Version 18.5.0: Mon Mar 11 20:40:32 PDT 2019; root:xnu-4903.251.3~3/RELEASE_X86_64","osMachine":"x86_64","cpus":[{"model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz","speed":2700,"user":123707280,"nice":0,"sys":80585050," idle":303826800,"irq":0}],"host":"yoyodyne"},"javascriptStack":{"message":"Error [ERR_SYNTHETIC]: J avaScript Callstack","stack":["at Object.writeReport (internal/process/report.js:16:13)","at [eval] :1:16","at Script.runInThisContext (vm.js:123:20)","at Object.runInThisContext (vm.js:313:38)","at Object.<anonymous> ([eval]-wrapper:9:26)","at Module._compile (internal/modules/cjs/loader.js:759:3 0)","at evalScript (internal/process/execution.js:79:25)"]},"nativeStack":[{"pc":"0x000000010013cc8 6","symbol":"report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, v8::L ocal<v8::String>) [/Users/boneskull/.nvm/versions/node/v12.1.0/bin/node]"},{"pc":"0x0000000100143fa 7","symbol":"report::WriteReport(v8::FunctionCallbackInfo<v8::Value> const&) [/Users/boneskull/.nvm /versions/node/v12.1.0/bin/node]"},{"pc":"0x00000001001e6494","symbol":"v8::internal::FunctionCallb ackArguments::Call(v8::internal::CallHandlerInfo) [/Users/boneskull/.nvm/versions/node/v12.1.0/bin/ node]"},{"pc":"0x00000001001e5aa4","symbol":"v8::internal::MaybeHandle<v8::internal::Object> v8::in ternal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Han dle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle <v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::Bui ltinArguments) [/Users/boneskull/.nvm/versions/node/v12.1.0/bin/node]"},{"pc":"0x00000001001e5050", "symbol":"v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Is olate*) [/Users/boneskull/.nvm/versions/node/v12.1.0/bin/node]"},{"pc":"0x0000000100e9b482","symbol ":"Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/Users/boneskull/.nvm/versions /node/v12.1.0/bin/node]"},{"pc":"0x0000000100e05904","symbol":"Builtins_InterpreterEntryTrampoline [/Users/boneskull/.nvm/versions/node/v12.1.0/bin/node]"}],"javascriptHeap":{"totalMemory":5009408," totalCommittedMemory":3317120,"usedMemory":2277880,"availableMemory":2194567328,"memoryLimit":21978 15296,"heapSpaces":{"read_only_space":{"memorySize":524288,"committedMemory":32024,"capacity":52397 6,"used":31712,"available":492264},"new_space":{"memorySize":2097152,"committedMemory":1847840,"cap acity":1047952,"used":826856,"available":221096},"old_space":{"memorySize":1171456,"committedMemory ":1021208,"capacity":1020400,"used":1020272,"available":128},"code_space":{"memorySize":688128,"com mittedMemory":165984,"capacity":149600,"used":149600,"available":0},"map_space":{"memorySize":52838 4,"committedMemory":250064,"capacity":249440,"used":249440,"available":0},"large_object_space":{"me morySize":0,"committedMemory":0,"capacity":0,"used":0,"available":0},"code_large_object_space":{"me morySize":0,"committedMemory":0,"capacity":0,"used":0,"available":0},"new_large_object_space":{"mem orySize":0,"committedMemory":0,"capacity":1047952,"used":0,"available":1047952}}},"resourceUsage":{ "userCpuSeconds":0.047874,"kernelCpuSeconds":0.013338,"cpuConsumptionPercent":6.1212,"maxRss":23035 117568,"pageFaults":{"IORequired":0,"IONotRequired":5823},"fsActivity":{"reads":0,"writes":0}},"lib uv":[{"type":"async","is_active":true,"is_referenced":false,"address":"0x000000010301d9e0"},{"type" :"timer","is_active":false,"is_referenced":false,"address":"0x0000000105041750","repeat":0,"firesIn MsFromNow":-354721149,"expired":true},{"type":"check","is_active":true,"is_referenced":false,"addre ss":"0x00000001050417e8"},{"type":"idle","is_active":false,"is_referenced":true,"address":"0x000000 0105041860"},{"type":"prepare","is_active":false,"is_referenced":false,"address":"0x00000001050418d 8"},{"type":"check","is_active":false,"is_referenced":false,"address":"0x0000000105041950"},{"type" :"async","is_active":true,"is_referenced":false,"address":"0x000000010321cf80"},{"type":"async","is _active":true,"is_referenced":false,"address":"0x00000001017c90e0"},{"type":"loop","is_active":fals e,"address":"0x00000001017dc400"}],"environmentVariables":{"TERM_SESSION_ID":"[REDACTED]","SSH_AUTH _SOCK":"[REDACTED]","Apple_PubSub_Socket_Render":"[REDACTED]","COLORFGBG":"15;0","ITERM_PROFILE":"y oyodyne","XPC_FLAGS":"0x0","LANG":"en_US.UTF-8","PWD":"/Users/boneskull/projects/christopher-hiller /report-toolkit","SHELL":"/usr/local/bin/zsh","SECURITYSESSIONID":"[REDACTED]","TERM_PROGRAM_VERSIO N":"3.2.7beta4","TERM_PROGRAM":"iTerm.app","PATH":"/Users/boneskull/.nvm/versions/node/v12.1.0/bin: /usr/local/opt/ruby/bin:/usr/local/opt/ccache/libexec:/opt/X11/bin:./node_modules/.bin:/Users/bones kull/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/MacGPG2/bin:/usr/l ocal/share/dotnet:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Applications/Wiresh ark.app/Contents/MacOS:/Users/boneskull/.antigen/bundles/robbyrussell/oh-my-zsh/lib:/Users/boneskul l/.antigen/bundles/zsh-users/zsh-syntax-highlighting:/Users/boneskull/.antigen/bundles/zsh-users/zs h-history-substring-search:/Users/boneskull/.antigen/bundles/zsh-users/zsh-completions:/Users/bones kull/.antigen/bundles/robbyrussell/oh-my-zsh/plugins/git:/Users/boneskull/.antigen/bundles/smallhad roncollider/antigen-git-rebase:/Users/boneskull/.antigen/bundles/robbyrussell/oh-my-zsh/plugins/git -extras:/Users/boneskull/.antigen/bundles/robbyrussell/oh-my-zsh/plugins/gitignore:/Users/boneskull
  4. { "header": { "event": "JavaScript API", "trigger": "API", "filename": "report.20190429.123135.45164.0.001.json",

    "dumpEventTime": "2019-04-29T12:31:35Z", "dumpEventTimeStamp": "1556566295950", "processId": 45164, "cwd": "/Users/boneskull/projects/christopher-hiller/report-toolkit", "commandLine": [ "node", "--experimental-report", "-e", "process.report.writeReport()" ], "nodejsVersion": "v12.1.0", "wordSize": 64, "arch": "x64", "platform": "darwin", "componentVersions": { "node": "12.1.0", "v8": "7.4.288.21-node.16", "uv": "1.28.0", "zlib": "1.2.11", "brotli": "1.0.7", "ares": "1.15.0", "modules": "72", "nghttp2": "1.38.0", "napi": "4", "llhttp": "1.1.1", "http_parser": "2.8.0", "openssl": "1.1.1b", "cldr": "35.1", "icu": "64.2", "tz": "2019a", "unicode": "12.1" }, "release": { "name": "node", "headersUrl": "https://nodejs.org/download/release/v12.1.0/node-v12.1.0-headers.tar.gz", "sourceUrl": "https://nodejs.org/download/release/v12.1.0/node-v12.1.0.tar.gz" }, "osName": "Darwin", "osRelease": "18.5.0", "osVersion": "Darwin Kernel Version 18.5.0: Mon Mar 11 20:40:32 PDT 2019; root:xnu-4903.251.3~3 /RELEASE_X86_64", "osMachine": "x86_64", "cpus": [ { "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", "speed": 2700, "user": 123707280, "nice": 0, "sys": 80585050, "idle": 303826800, "irq": 0 } ], "host": "yoyodyne" },
  5. { "header": { "event": "JavaScript API", "trigger": "API", "filename": "report.20190429.123135.45164.0.001.json",

    "dumpEventTime": "2019-04-29T12:31:35Z", "dumpEventTimeStamp": "1556566295950", "processId": 45164, "cwd": "/Users/boneskull/projects/christopher-hiller/report-toolkit", "commandLine": [ "node", "--experimental-report", "-e", "process.report.writeReport()" ], "nodejsVersion": "v12.1.0", "wordSize": 64, "arch": "x64", "platform": "darwin", "componentVersions": { "node": "12.1.0", "v8": "7.4.288.21-node.16", "uv": "1.28.0", "zlib": "1.2.11", "brotli": "1.0.7", "ares": "1.15.0", "modules": "72", "nghttp2": "1.38.0", "napi": "4", "llhttp": "1.1.1", "http_parser": "2.8.0", "openssl": "1.1.1b", "cldr": "35.1", "icu": "64.2", "tz": "2019a", "unicode": "12.1" }, "release": { "name": "node", "headersUrl": "https://nodejs.org/download/release/v12.1.0/node-v12.1.0-headers.tar.gz", "sourceUrl": "https://nodejs.org/download/release/v12.1.0/node-v12.1.0.tar.gz" }, "osName": "Darwin", "osRelease": "18.5.0", "osVersion": "Darwin Kernel Version 18.5.0: Mon Mar 11 20:40:32 PDT 2019; root:xnu-4903.251.3~3 /RELEASE_X86_64", "osMachine": "x86_64", "cpus": [ { "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", "speed": 2700, "user": 123707280, "nice": 0, "sys": 80585050, "idle": 303826800, "irq": 0 } ], "host": "yoyodyne" },
  6. "header": { "event": "JavaScript API", "trigger": "API", "filename": "report.20190429.123135.45164.0.00 1.json",

    "dumpEventTime": "2019-04-29T12:31:35Z", "dumpEventTimeStamp": "1556566295950", "processId": 45164, "cwd": "/Users/boneskull/projects/christopher- hiller/report-toolkit", "commandLine": [ "node", "--experimental-report", "-e", "process.report.writeReport()" ], "nodejsVersion": "v12.1.0", "wordSize": 64, "arch": "x64", "platform": "darwin", "componentVersions": { "node": "12.1.0", "v8": "7.4.288.21-node.16", "uv": "1.28.0", "zlib": "1.2.11", "brotli": "1.0.7", "ares": "1.15.0", "modules": "72", "nghttp2": "1.38.0", "napi": "4", "llhttp": "1.1.1", "http_parser": "2.8.0", "openssl": "1.1.1b", "cldr": "35.1", "icu": "64.2", "tz": "2019a", "unicode": "12.1" }, "release": { "name": "node", "headersUrl": "https://nodejs.org/download/r elease/v12.1.0/node-v12.1.0-headers.tar.gz", "sourceUrl": "https://nodejs.org/download/re lease/v12.1.0/node-v12.1.0.tar.gz" }, "osName": "Darwin", "osRelease": "18.5.0", "osVersion": "Darwin Kernel Version 18.5.0: Mo n Mar 11 20:40:32 PDT 2019; root:xnu- 4903.251.3~3/RELEASE_X86_64", "osMachine": "x86_64", "cpus": [ { "model": "Intel(R) Core(TM) i7- 6820HQ CPU @ 2.70GHz", "speed": 2700, "user": 123707280, "nice": 0, "sys": 80585050, "idle": 303826800, "irq": 0 } ], "host": "yoyodyne" }
  7. "javascriptStack": { "message": "Error [ERR_SYNTHETIC]: JavaSc ript Callstack", "stack": [

    "at Object.writeReport (internal/proces s/report.js:16:13)", "at [eval]:1:16", "at Script.runInThisContext (vm.js:123: 20)", "at Object.runInThisContext (vm.js:313: 38)", "at Object.<anonymous> ([eval]- wrapper:9:26)", "at Module._compile (internal/modules/c js/loader.js:759:30)", "at evalScript (internal/process/execut ion.js:79:25)" ] }, "nativeStack": [ { "pc": "0x000000010013cc86", "symbol": "report::TriggerNodeReport(v8 ::Isolate*, node::Environment*, char const*, char const*, std::__1::basic_string<char, std ::__1::char_traits<char>, std::__1::allocator <char> > const&, v8::Local<v8::String>) [/Use rs/boneskull/.nvm/versions/node/v12.1.0/bin/n ode]" }, { "pc": "0x0000000100143fa7", "symbol": "report::WriteReport(v8::Func tionCallbackInfo<v8::Value> const&) [/Users/b oneskull/.nvm/versions/node/v12.1.0/bin/node] " }, { "pc": "0x00000001001e6494", "symbol": "v8::internal::FunctionCallba ckArguments::Call(v8::internal::CallHandlerIn fo) [/Users/boneskull/.nvm/versions/node/v12. 1.0/bin/node]" } ]
  8. "javascriptHeap": { "totalMemory": 5009408, "totalCommittedMemory": 3317120, "usedMemory": 2277880, "availableMemory": 2194567328,

    "memoryLimit": 2197815296, "heapSpaces": { "read_only_space": { "memorySize": 524288, "committedMemory": 32024, "capacity": 523976, "used": 31712, "available": 492264 }, "new_space": { "memorySize": 2097152, "committedMemory": 1847840, "capacity": 1047952, "used": 826856, "available": 221096 }, "old_space": { "memorySize": 1171456, "committedMemory": 1021208, "capacity": 1020400, "used": 1020272, "available": 128 } } } "resourceUsage": { "userCpuSeconds": 0.047874, "kernelCpuSeconds": 0.013338, "cpuConsumptionPercent": 6.1212, "maxRss": 23035117568, "pageFaults": { "IORequired": 0, "IONotRequired": 5823 }, "fsActivity": { "reads": 0, "writes": 0 } }
  9. "libuv": [ { "type": "async", "is_active": true, "is_referenced": false, "address":

    "0x000000010301d9e0" }, { "type": "timer", "is_active": false, "is_referenced": false, "address": "0x0000000105041750", "repeat": 0, "firesInMsFromNow": -354721149, "expired": true }, { "type": "check", "is_active": true, "is_referenced": false, "address": "0x00000001050417e8" }, { "type": "idle", "is_active": false, "is_referenced": true, "address": "0x0000000105041860" } ] "environmentVariables": { "COLORFGBG": "15;0", "ITERM_PROFILE": "yoyodyne", "XPC_FLAGS": "0x0", "LANG": "en_US.UTF-8", "PWD": "/Users/boneskull/projects/christo pher-hiller/report-toolkit", "SHELL": "/usr/local/bin/zsh", "TERM_PROGRAM_VERSION": "3.2.7beta4", "TERM_PROGRAM": "iTerm.app", "COLORTERM": "truecolor", "TERM": "xterm-256color", "HOME": "/Users/boneskull", "USER": "boneskull", "XPC_SERVICE_NAME": "0", "LOGNAME": "boneskull” }
  10. "userLimits": { "core_file_size_blocks": { "soft": 0, "hard": "unlimited" }, "data_seg_size_kbytes":

    { "soft": "unlimited", "hard": "unlimited" }, "file_size_blocks": { "soft": "unlimited", "hard": "unlimited" }, "max_locked_memory_bytes": { "soft": "unlimited", "hard": "unlimited" }, "max_memory_size_kbytes": { "soft": "unlimited", "hard": "unlimited" }, "open_files": { "soft": 524288, "hard": 524288 }, "stack_size_bytes": { "soft": 8388608, "hard": 67104768 } } "sharedObjects": [ "/Users/boneskull/.nvm/versions/node/v12. 1.0/bin/node", "/System/Library/Frameworks/CoreFoundatio n.framework/Versions/A/CoreFoundation", "/usr/lib/libSystem.B.dylib", "/usr/lib/libc++.1.dylib", "/usr/lib/libobjc.A.dylib", "/usr/lib/libdiagnosticMessagesClient.dyl ib", "/usr/lib/libicucore.A.dylib", "/usr/lib/libz.1.dylib", "/usr/lib/libc++abi.dylib", "/usr/lib/system/libcache.dylib", "/usr/lib/system/libcommonCrypto.dylib", "/usr/lib/system/libcompiler_rt.dylib", "/usr/lib/system/libcopyfile.dylib", "/usr/lib/system/libcorecrypto.dylib", "/usr/lib/system/libdispatch.dylib", "/usr/lib/system/libdyld.dylib", "/usr/lib/system/libkeymgr.dylib", "/usr/lib/system/liblaunch.dylib", "/usr/lib/system/libmacho.dylib", "/usr/lib/system/libquarantine.dylib", "/usr/lib/system/libremovefile.dylib", "/usr/lib/system/libsystem_asl.dylib", "/usr/lib/system/libsystem_blocks.dylib", "/usr/lib/system/libsystem_c.dylib” ]
  11. "libuv": [ { "type": "async", "is_active": true, "is_referenced": false, "address":

    "0x000000010301d9e0" }, { "type": "timer", "is_active": false, "is_referenced": false, "address": "0x0000000105041750", "repeat": 0, "firesInMsFromNow": -354721149, "expired": true }, { "type": "check", "is_active": true, "is_referenced": false, "address": "0x00000001050417e8" }, { "type": "idle", "is_active": false, "is_referenced": true, "address": "0x0000000105041860" } ] "environmentVariables": { "COLORFGBG": "15;0", "ITERM_PROFILE": "yoyodyne", "XPC_FLAGS": "0x0", "LANG": "en_US.UTF-8", "PWD": "/Users/boneskull/projects/christo pher-hiller/report-toolkit", "SHELL": "/usr/local/bin/zsh", "TERM_PROGRAM_VERSION": "3.2.7beta4", "TERM_PROGRAM": "iTerm.app", "COLORTERM": "truecolor", "TERM": "xterm-256color", "HOME": "/Users/boneskull", "USER": "boneskull", "XPC_SERVICE_NAME": "0", "LOGNAME": "boneskull” }
  12. "javascriptHeap": { "totalMemory": 5009408, "totalCommittedMemory": 3317120, "usedMemory": 2277880, "availableMemory": 2194567328,

    "memoryLimit": 2197815296, "heapSpaces": { "read_only_space": { "memorySize": 524288, "committedMemory": 32024, "capacity": 523976, "used": 31712, "available": 492264 }, "new_space": { "memorySize": 2097152, "committedMemory": 1847840, "capacity": 1047952, "used": 826856, "available": 221096 }, "old_space": { "memorySize": 1171456, "committedMemory": 1021208, "capacity": 1020400, "used": 1020272, "available": 128 } } } "resourceUsage": { "userCpuSeconds": 0.047874, "kernelCpuSeconds": 0.013338, "cpuConsumptionPercent": 6.1212, "maxRss": 23035117568, "pageFaults": { "IORequired": 0, "IONotRequired": 5823 }, "fsActivity": { "reads": 0, "writes": 0 } }
  13. "javascriptStack": { "message": "Error [ERR_SYNTHETIC]: JavaSc ript Callstack", "stack": [

    "at Object.writeReport (internal/proces s/report.js:16:13)", "at [eval]:1:16", "at Script.runInThisContext (vm.js:123: 20)", "at Object.runInThisContext (vm.js:313: 38)", "at Object.<anonymous> ([eval]- wrapper:9:26)", "at Module._compile (internal/modules/c js/loader.js:759:30)", "at evalScript (internal/process/execut ion.js:79:25)" ] }, "nativeStack": [ { "pc": "0x000000010013cc86", "symbol": "report::TriggerNodeReport(v8 ::Isolate*, node::Environment*, char const*, char const*, std::__1::basic_string<char, std ::__1::char_traits<char>, std::__1::allocator <char> > const&, v8::Local<v8::String>) [/Use rs/boneskull/.nvm/versions/node/v12.1.0/bin/n ode]" }, { "pc": "0x0000000100143fa7", "symbol": "report::WriteReport(v8::Func tionCallbackInfo<v8::Value> const&) [/Users/b oneskull/.nvm/versions/node/v12.1.0/bin/node] " }, { "pc": "0x00000001001e6494", "symbol": "v8::internal::FunctionCallba ckArguments::Call(v8::internal::CallHandlerIn fo) [/Users/boneskull/.nvm/versions/node/v12. 1.0/bin/node]" } ]
  14. "header": { "event": "JavaScript API", "trigger": "API", "filename": "report.20190429.123135.45164.0.00 1.json",

    "dumpEventTime": "2019-04-29T12:31:35Z", "dumpEventTimeStamp": "1556566295950", "processId": 45164, "cwd": "/Users/boneskull/projects/christopher- hiller/report-toolkit", "commandLine": [ "node", "--experimental-report", "-e", "process.report.writeReport()" ], "nodejsVersion": "v12.1.0", "wordSize": 64, "arch": "x64", "platform": "darwin", "componentVersions": { "node": "12.1.0", "v8": "7.4.288.21-node.16", "uv": "1.28.0", "zlib": "1.2.11", "brotli": "1.0.7", "ares": "1.15.0", "modules": "72", "nghttp2": "1.38.0", "napi": "4", "llhttp": "1.1.1", "http_parser": "2.8.0", "openssl": "1.1.1b", "cldr": "35.1", "icu": "64.2", "tz": "2019a", "unicode": "12.1" }, "release": { "name": "node", "headersUrl": "https://nodejs.org/download/r elease/v12.1.0/node-v12.1.0-headers.tar.gz", "sourceUrl": "https://nodejs.org/download/re lease/v12.1.0/node-v12.1.0.tar.gz" }, "osName": "Darwin", "osRelease": "18.5.0", "osVersion": "Darwin Kernel Version 18.5.0: Mo n Mar 11 20:40:32 PDT 2019; root:xnu- 4903.251.3~3/RELEASE_X86_64", "osMachine": "x86_64", "cpus": [ { "model": "Intel(R) Core(TM) i7- 6820HQ CPU @ 2.70GHz", "speed": 2700, "user": 123707280, "nice": 0, "sys": 80585050, "idle": 303826800, "irq": 0 } ], "host": "yoyodyne" }
  15. "header": { "event": "JavaScript API", "trigger": "API", "filename": "report.20190429.123135.45164.0.00 1.json",

    "dumpEventTime": "2019-04-29T12:31:35Z", "dumpEventTimeStamp": "1556566295950", "processId": 45164, "cwd": "/Users/boneskull/projects/christopher- hiller/report-toolkit", "commandLine": [ "node", "--experimental-report", "-e", "process.report.writeReport()" ], "nodejsVersion": "v12.1.0", "wordSize": 64, "arch": "x64", "platform": "darwin", "componentVersions": { "node": "12.1.0", "v8": "7.4.288.21-node.16", "uv": "1.28.0", "zlib": "1.2.11", "brotli": "1.0.7", "ares": "1.15.0", "modules": "72", "nghttp2": "1.38.0", "napi": "4", "llhttp": "1.1.1", "http_parser": "2.8.0", "openssl": "1.1.1b",
  16. A multitool for processing & analyzing Diagnostic Reports • CLI

    tool • Programmable API • See https://ibm.github.io/report-toolkit for documentation (WIP) • Alpha!
  17. $ npx report-toolkit redact report.json --replace • Based on blacklist

    used by AWS’ git-secrets • Customizable (WIP) • PRs welcome!
  18. "libuv": [ { "type": "async", "is_active": true, "is_referenced": false, "address":

    "0x000000010301d9e0" }, { "type": "timer", "is_active": false, "is_referenced": false, "address": "0x0000000105041750", "repeat": 0, "firesInMsFromNow": -354721149, "expired": true }, { "repeat": 0, "firesInMsFromNow": 9992661, "expired": false, "type": "timer", "is_active": true, "is_referenced": true, "address": "0x00007ffeefbfe2e8" }, ]
  19. { "repeat": 0, "firesInMsFromNow": 9992661, "expired": false, "type": "timer", "is_active":

    true, "is_referenced": true, "address": "0x00007ffeefbfe2e8" },
  20. $ npx report-toolkit inspect report.json • ESLint-like set of heuristics

    to check reports for problems • Rule long-timeout applies here • Write your own rules! Publish to npm! etc.
  21. $ npx report-toolkit diff report-A.json report-B.json • Purpose-built diffing for

    diagnostic reports • Ignores likely nonsense • Answers “how does the process change over time?”
  22. $ npx report-toolkit transform report.json -t stack-hash • Converts report

    formats • csv, json, stack-hash, filter, table, newline, numeric, redact • Combine transforms • Combine w/ other commands • Write your own! (WIP)