Skip to content

Instantly share code, notes, and snippets.

@TotallyInformation
Created September 3, 2016 17:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TotallyInformation/bed21fe7c87e63fd3c3555309797b83c to your computer and use it in GitHub Desktop.
Save TotallyInformation/bed21fe7c87e63fd3c3555309797b83c to your computer and use it in GitHub Desktop.
Node-RED Process Details (Debugging, Linux)

This example flow will let you monitor the Operating System process details for your Node-RED instance.

To make this work, you need to know the PID (Process Identifier) of your Node-RED instance. The easiest way to do that is to grab it on startup and add it to the global variables from settings.js. Add the following to your settings.js file & restart NR:

...
functionGlobalContext: {
    'pid': process.pid
},
...

The data is taken from the /proc part of the Linux filing system for which you can find the specification in the Kernel docs. Specifically, it will tell you the details of the memory used by Node-RED. We are using /proc/<pid>/status here. However, there are plenty of other things you could also look up in a similar way as illustrated by this console command output:

$ ls /proc/28692/
autogroup   cmdline          cwd@     fdinfo/     maps       mountstats  oom_score      root@      stack   syscall
auxv        comm             environ  io          mem        net/        oom_score_adj  sched      stat    task/
cgroup      coredump_filter  exe@     limits      mountinfo  ns/         pagemap        schedstat  statm   wchan
clear_refs  cpuset           fd/      map_files/  mounts     oom_adj     personality    smaps      status

$ cat /proc/28692/net/sockstat
sockets: used 172
TCP: inuse 18 orphan 0 tw 30 alloc 29 mem 3
UDP: inuse 9 mem 5
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

$ cat /proc/28692/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7336                 7336                 processes
Max open files            4096                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7336                 7336                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
[
{
"id": "726d8e6c.963a3",
"type": "comment",
"z": "106a5b82.ef95a4",
"name": "Get details of NR process",
"info": "See:\n\nhttps://www.kernel.org/doc/Documentation/filesystems/proc.txt\n\nFor this to work, you need to set the PID\n(Process ID) for Node-Red. The easiest way\nto do this is to define it in your settings.js\n\nAdd the following to settings.js:\n```\n...\nfunctionGlobalContext: {\n\t\t'pid'\t\t\t: process.pid\n },\n...\n```",
"x": 229,
"y": 1363,
"wires": []
},
{
"id": "9f6b4d5c.531da",
"type": "inject",
"z": "106a5b82.ef95a4",
"name": "",
"topic": "process/status",
"payload": "pid",
"payloadType": "global",
"repeat": "",
"crontab": "",
"once": false,
"x": 160,
"y": 1400,
"wires": [
[
"3609f028.21a15"
]
]
},
{
"id": "a1f4d4dd.9ca9c8",
"type": "exec",
"z": "106a5b82.ef95a4",
"command": "cat",
"addpay": true,
"append": "",
"useSpawn": "",
"timer": "",
"name": "cat /proc/<pid>/status",
"x": 460,
"y": 1400,
"wires": [
[
"3fda85a9.fddfba"
],
[],
[]
]
},
{
"id": "3fda85a9.fddfba",
"type": "debug",
"z": "106a5b82.ef95a4",
"name": "",
"active": false,
"console": "false",
"complete": "false",
"x": 670,
"y": 1400,
"wires": []
},
{
"id": "3609f028.21a15",
"type": "function",
"z": "106a5b82.ef95a4",
"name": "",
"func": "msg.payload = '/proc/' + msg.payload + '/status';\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 290,
"y": 1400,
"wires": [
[
"a1f4d4dd.9ca9c8"
]
]
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment