Node.js 重启后执行冻结
Node.js execution freezes after reboot
配置:
我正在构建一个 FPV 机器人,它可以通过 Wi-Fi 本地网络浏览器进行控制。
我获得了 MVP 并且 运行。我在网络浏览器上获得了 640x480@20FPS 和 240mS 延迟视频流,并且在控件上获得了 7mS 延迟。
我是 运行 NODE.JS 网络服务器 raspberry pi 3B+。操作系统是 Raspbian Stretch。我正在使用 Socket.IO 来提供低延迟双向控制和 Websockets 来传输流数据包。
问题:
关闭 Raspberry 后,NODE.JS 有时会在执行时冻结。我没有收到任何错误,也没有关于 NODE 卡住原因的反馈。它需要 CTRL-C 才能关闭。
pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js
如果我将 NODE.JS 作为单独的进程发布,我可以继续使用 RPI,但 NODE 在后台冻结。
pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js &
[1] 778
pi@MazeRunner:~ $
详情:
- 有时,NODE.JS 可以在没有任何反馈的情况下等待约 5 分钟后自行恢复。才刚刚开始。
pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js
INFO: Server interface - enxb827eb23ca00 192.168.0.202
INFO: 192.168.0.202 listening to html requests on port 8080
INFO: /home/pi/2019-06-09-ffmpeg/index.html has been loaded into memory
INFO: /home/pi/2019-06-09-ffmpeg/style.css has been loaded into memory
INFO: /home/pi/2019-06-09-ffmpeg/jsmpeg.min.js has been loaded into memory
- 有时我可以通过初始化 npm 将 NODE 恢复到工作状态,但有时这个命令也会卡住。
pi@MazeRunner:~ $ npm --init yes
我总是能够通过使用 apt-get remove 删除它并使用 apt-get install 重新安装它来恢复节点,这显然是不可行的
我尝试寻找 node.js 或 npm 日志,但我没有找到它们
在切断电源之前执行关机似乎使 node.js 更有可能在启动时不冻结。
pi@MazeRunner:~ $ sudo shutdown now
问题:
有没有办法让 node.js 在某处发出详细的调试日志来调试问题? STDOUT 和 STDERR
中都没有错误消息
我希望机器人是即插即用的,并且在突然断电后仍能持续工作。我可以在浏览器页面上添加一个关机按钮,但你很容易忘记使用它。通过控制台关闭完全违背了拥有浏览器控制界面的目的。
有没有办法让 raspbian 拉伸安全地突然关闭?
感谢您提供的一切帮助!
您的代码可能会阻止 event-loop。特别是在处理 websockets 时,它有点危险,因为 loop-cycle 可能会等到 "ticked" 后再继续。在那种情况下,没有办法处理日志或任何东西。 Node.js 在单线程上运行,如果您的代码阻塞 event-loop 您的整个应用程序将冻结。
您也可以查看此模块https://github.com/naugtur/blocked-at
参考资料
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
https://www.youtube.com/watch?v=8aGhZQkoFbQ
https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and-its-metrics-c4907b19da4c
我在“Pi Zero”(ARMv6) 和节点 v10 上遇到了同样的问题,当我 strace node
时,我可以看到 node
挂在 getrandom(
中。
好像重启后树莓上的熵不够
我打电话
$ sudo apt install rng-tools
$ sudo systemctl enable rng-tools
在 reboot
之后问题得到解决。
配置:
我正在构建一个 FPV 机器人,它可以通过 Wi-Fi 本地网络浏览器进行控制。
我获得了 MVP 并且 运行。我在网络浏览器上获得了 640x480@20FPS 和 240mS 延迟视频流,并且在控件上获得了 7mS 延迟。
我是 运行 NODE.JS 网络服务器 raspberry pi 3B+。操作系统是 Raspbian Stretch。我正在使用 Socket.IO 来提供低延迟双向控制和 Websockets 来传输流数据包。
问题:
关闭 Raspberry 后,NODE.JS 有时会在执行时冻结。我没有收到任何错误,也没有关于 NODE 卡住原因的反馈。它需要 CTRL-C 才能关闭。
pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js
如果我将 NODE.JS 作为单独的进程发布,我可以继续使用 RPI,但 NODE 在后台冻结。
pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js &
[1] 778
pi@MazeRunner:~ $
详情:
- 有时,NODE.JS 可以在没有任何反馈的情况下等待约 5 分钟后自行恢复。才刚刚开始。
pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js
INFO: Server interface - enxb827eb23ca00 192.168.0.202
INFO: 192.168.0.202 listening to html requests on port 8080
INFO: /home/pi/2019-06-09-ffmpeg/index.html has been loaded into memory
INFO: /home/pi/2019-06-09-ffmpeg/style.css has been loaded into memory
INFO: /home/pi/2019-06-09-ffmpeg/jsmpeg.min.js has been loaded into memory
- 有时我可以通过初始化 npm 将 NODE 恢复到工作状态,但有时这个命令也会卡住。
pi@MazeRunner:~ $ npm --init yes
我总是能够通过使用 apt-get remove 删除它并使用 apt-get install 重新安装它来恢复节点,这显然是不可行的
我尝试寻找 node.js 或 npm 日志,但我没有找到它们
在切断电源之前执行关机似乎使 node.js 更有可能在启动时不冻结。
pi@MazeRunner:~ $ sudo shutdown now
问题:
有没有办法让 node.js 在某处发出详细的调试日志来调试问题? STDOUT 和 STDERR
中都没有错误消息我希望机器人是即插即用的,并且在突然断电后仍能持续工作。我可以在浏览器页面上添加一个关机按钮,但你很容易忘记使用它。通过控制台关闭完全违背了拥有浏览器控制界面的目的。
有没有办法让 raspbian 拉伸安全地突然关闭?
感谢您提供的一切帮助!
您的代码可能会阻止 event-loop。特别是在处理 websockets 时,它有点危险,因为 loop-cycle 可能会等到 "ticked" 后再继续。在那种情况下,没有办法处理日志或任何东西。 Node.js 在单线程上运行,如果您的代码阻塞 event-loop 您的整个应用程序将冻结。
您也可以查看此模块https://github.com/naugtur/blocked-at
参考资料
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
https://www.youtube.com/watch?v=8aGhZQkoFbQ
https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and-its-metrics-c4907b19da4c
我在“Pi Zero”(ARMv6) 和节点 v10 上遇到了同样的问题,当我 strace node
时,我可以看到 node
挂在 getrandom(
中。
好像重启后树莓上的熵不够
我打电话
$ sudo apt install rng-tools
$ sudo systemctl enable rng-tools
在 reboot
之后问题得到解决。