当前位置: 首页 > 科技观察

Joyent如何调试Node代码

时间:2023-03-11 21:38:54 科技观察

Node.js和JavaScript都为用户带来了强大的功能和性能,但都有各自独特的使用成本。首先,JavaScript是一种相对较新的通用编程语言;其次,Node.js栈采用的报错和调试方式比较特殊。当我最近与Node.js项目负责人TimothyJ.Fontaine讨论这些问题时,他说Joyent——和其他一些Node.js用户——正在采用类似的方法来处理这个过程。“Node.js使用JavaScript并且是动态的,”他说,“所以当人们遇到问题时,很难弄清楚到底是哪里出了问题。在传统应用程序中,如果出现崩溃,我们可以找到它。”相关的核心文件和符号。然而,在Node.jsJavaScript的V8引擎中,如果进程卡住了,我们根本没有足够的信息来弄清楚是进程的哪一步导致了失败——这是因为所有的JavaScript信息都没有了。因为要弄清楚发生了什么,唯一的方法就是添加更多日志记录或搜索现有日志。”作为最著名的Node.js部署问题的受害者,沃尔玛对此有话要说。据说经过调查,Wal-Mart实际上发现Node.js是造成内存泄漏的罪魁祸首,但Fontaine认为这种情况只能算是极端情况,他还解释说,在大多数情况下,关键的决定因素是Node.js如何Fontaine指出:“在Node.js的众多特性中,最难掌握的是它的异步特性。很多东西同时运行与PHP、Python和Ruby相比,它们每个请求只有一个进程或一个线程。所以对于JavaScript来说,即使是完整的堆栈跟踪也不足以实现Debug目标。”为此,Joyent认为Node.js部署引起的大多数问题都是意外事件和应用程序错误,而这些不容易发现在部署过程的早期阶段。“Node设计方式的一个副产品,”Fontaine解释说,“JavaScript是一种动态语言,所以我们不会从编译器获得静态运行时状态。这既是积极的又是触发性的。负面影响,取决于关于你实际开发的方式,其实我们遇到的失败案例,大部分都是很常见的应用漏洞,但是我们很难重构运行历史来重现已经造成的问题,为了解决调试过程中面临的问题带着这个障碍,Joyent使用了自家的SmartOS作为开发平台,SmartOS是OpenSloaris系统的一个分支,其DTrace技术成为该平台最具特色的功能(除了其他开发者,JoyentCTOBrianCantrill也参与了这项技术的发展)。DTrace可以在不影响性能的情况下跟踪和总结应用程序的执行过程。Fontaine等众多技术从业者回顾rd它作为检查Node.js运行代码环境的理想选择。“您可以在代码运行时查看JavaScript堆栈框架,”Fontaine解释道。“在其他环境中,我们没有办法在这个级别进行检查。在其他平台上,我们必须使用特殊标志运行Node以获得额外的调试信息,这会对性能产生负面影响。“Joyent之所以继续这样做,是因为我们编写了工具来帮助我们处理这类问题。此外,我们积极与其他用户互动,并利用这些技术成果来帮助其他人。”SmartOS本身是一个免费的系统许可在CDDL下,但大多数人显然希望在他们已经使用的系统平台上获得理想的调试工具——而随着Node.js朝着更完整的1.0版本迈进,Joyent可能也在做进一步的探索。英文原版:http://www.infoworld.com/t/open-source-software/how-joyent-debugs-node-code-242287