Node.js和V8适用于内存有限的设备吗?

26

想知道Node.js与V8引擎是否适合部署在内存有限的设备上(例如256MB),并与其他进程并行运行。

我读到说它会占用机器的资源。有没有办法限制V8引擎本身的内存和处理使用量?


在树莓派上使用NodeJS?这可能很有趣。 - ming_codes
你能多说一些关于这个设备的信息吗?它采用哪种CPU架构,是固态硬盘还是机械硬盘,是否需要运行GUI等等。 - jholster
我正在根据安卓系统来运行它,同时还需要图形用户界面。因此,最好限制内存的使用。 - TonyTakeshi
3个回答

21

256 MB的RAM足以运行Node.js(例如在Linux VPS实例上),假设没有运行其他占用内存的软件。Node具有--max-stack-size参数来限制内存使用。

由于其JIT架构,V8可能会比解释/字节编译实现(如PHP或CPython)使用更多的内存(同时提供更优越的性能),但Node的单线程事件驱动服务器模型通常可以有效地利用资源。此外,要利用多个CPU核心,必须运行多个Node.js进程(而不是内存共享线程),从而有效地增加了内存使用量;但这种限制也适用于其最流行的竞争对手。

就与其他用户程序类似,Node.js进程在“与其他进程并行运行”或“挂接机器资源”的方面并没有什么特别之处(除了常见的多核问题)。您可以在操作系统级别上降低Node.js进程的优先级(例如使用nice命令),但根据设备/应用程序的不同,I/O可能是更大的问题。

从技术/效率的角度来看,当需要真正的多处理支持和高并发性时,Erlang可能是更理想的高级语言选择。


15

全栈Node.js对于Yun来说太过繁重,只能完成一些非常简单的脚本。详情请参见http://forum.arduino.cc/index.php?topic=193765.15。 - nkint
7
当然,在这样的设备上,你非常受限制,但“只有非常简单的脚本”也很相对。在我的实验中,使用一台RAM只有YÚN一半的TL-MR3020,可以做到以下事情:
  • 提供HTML5网页应用程序;
  • 每200毫秒接收WebSocket Secure上的JSON消息;
  • 每50ms在WebSocket Secure上发送JSON消息;
  • 每40ms在UDP上发送和接收JSON消息;
  • 将操作记录在文本文件中。 所有这些都可以很好地处理2或3个客户端,然后随着消息数量的增加,速度会略微变慢。
- Matteo T.
1
@MatteoT,你有没有关于如何在那个设备上设置Node.js的链接/指南?它是使用OpenWRT吗? - Daniel Sokolowski
我下载了由Arduino YUN社区构建的软件包,并将它们安装在OpenWRT上。我还使用了USB闪存驱动器来扩展我的路由器内存。 - Matteo T.

6

BeagleBone有256MB的RAM(在普通配置下没有虚拟内存),这使其能够很好地运行node.js。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接