Articles of 分析

使用DTrace分析Node.js

我目前正在分析我的node.js应用程序。我发现这个博客: http : //blog.nodejs.org/2012/04/25/profiling-node-js/ ,这表明我应该使用Dtrace。 我使用这里给出的步骤在Ubuntu 12.04上安装了dtrace: https : //askubuntu.com/questions/60940/how-do-i-install-dtrace 但是,当我在我的terminal运行这个命令时,我的节点应用程序正在运行: dtrace -o stacks.out -n 'profile-97/execname == "node" && arg1/{ @[jstack(100, 8000)] = count(); } tick-60s { exit(0); }' 除此之外,stacks.out保持空白:CPU IDfunction:名称1 387695:tick-60s 任何build议可能是错误的?

nodejs / v8 flamegraph中使用perf_events的未知事件

我试着用Brendan Gregg 在这里描述的使用Linux perf_event进行nodejs分析。 工作stream程如下: 使用–perf-basic-prof运行节点> 0.11.13,它会创build/tmp/perf-(PID).map JavaScript符号映射的/tmp/perf-(PID).map文件。 使用perf record -F 99 -p `pgrep -n node` -g — sleep 30捕获堆栈perf record -F 99 -p `pgrep -n node` -g — sleep 30 使用此库中的stackcollapse-perf.pl脚本折叠堆栈 使用flamegraph.pl脚本生成svg火焰图 我得到以下结果(开头看起来非常好): 问题是有很多[unknown]元素,我想应该是我的nodejs函数调用。 我假设整个过程在第3点失败,其中perf数据应该使用由–perf-basic-prof执行的node / v8生成的映射来折叠。 创build/tmp/perf-PID.map文件,并在节点执行过程中向其写入一些映射。 如何解决这个问题呢? 我正在使用CentOS 6.5 x64,并且已经尝试使用节点0.11.13,0.11.14(包括预构build和编译),但都没有成功。

用v8来分析nodejs

我有一个节点应用程序,我想使用节点分析器进行configuration文件。 所以,我跑了: node –prof v8test.js 然后,我下载了V8工具 svn checkout http://v8.googlecode.com/svn/trunk/ v8; make dependencies; make native; 然后尝试分析创build的文件(v8.log) tools/linux-tick-processor ../v8.log 但是我得到了很多: Code move event for unknown code: 0x289dd8475560 Code move event for unknown code: 0x289dd84758e0 Code move event for unknown code: 0x289dd8479280 Code move event for unknown code: 0x289dd8482980 Code move event for unknown code: 0x289dd84c2a80 line 718730: […]

如何检查x64 MacOS X 10.7上`node –prof`的结果?

我尝试在CLI上剖析我的node.js脚本。 正如https://code.google.com/p/v8/wiki/V8Profiler或http://blog.arc90.com/2012/03/05/profiling-node-programs-on-mac-os- x / a做: $ node –prof my_script.js 所有好的,我得到一堆名为v8.log文件。 但是在检查工具中都出错了。 $ tools/mac-tick-processor v8.log 给我看 Statistical profiling result from v8.log, (298 ticks, 237 unaccounted, 0 excluded). 和空的JavaScript部分。 [JavaScript]: ticks total nonlib name 另外我尝试https://github.com/bnoordhuis/node-profiler ,但也得到一些结果。 我怎样才能使用–prof结果? $ node -v v0.8.18 $ sw_vers ProductName: Mac OS X ProductVersion: 10.7.4 BuildVersion: 11E53

适用于Web分析的数据库?

我正在研究类似于Google Analytics的networking分析,目前正在使用MongoDB 。 使用MongoDB的问题 写和读是在同一时间进行的,所以在写点之后变慢。 所以我正在寻找一个适合以下要求的适当的数据库: 要求 它应该是开源的 是可扩展的,可以适应大量的数据 更好的性能,同时汇总数据 基于时间的聚合 实时数据处理 有驱动程序支持(客户端)Node.js和Java 数据库应该可以通过Node.js和Java进行扩展 我使用Java保存数据,并通过Node.js获取数据

Nodejs分析:如何处理v8.log文件

我只安装了Nodejs。 我正在使用Windows 8 x64。 我通过node –prof app.js运行我的程序。 它生成一个v8.log文件。 现在,我该如何处理v8.log文件?

如何读取nodejs内部分析器的tick-processor输出

我有兴趣分析我的Node.js应用程序。 我用–prof标志启动了它,并获得了一个v8.log文件。 我已经采取了windows-tick处理器,并获得了一个据说是人类可读的分析日志。 在这个问题的底部是一些从日志文件中摘录的小节,我完全不理解。 我得到了蜱统计方法。 我不明白total vs vs nonlib是什么意思。 另外我不明白为什么有些事情是以LazyCompile , Function , Stub或其他术语为前缀的。 我希望得到的最好的答案是刻度处理器输出格式的完整文档/指南,完整地解释每个术语,结构等。 除此之外,我只是不明白懒惰编译是什么。 它是编译? 不是每个函数都只能编译一次吗? 那么编译怎么可能成为我的应用程序执行的重要部分呢? 该应用程序运行几个小时来生成这个日志,我假设内部的JavaScript编译需要几毫秒。 这表明懒编译是每个函数都不会发生的事情,而是在某种代码评估过程中发生的。 这是否意味着无处不在我有一个函数定义(例如一个嵌套的函数),内部函数每次都得到“懒编译”? 我无法在任何地方find任何信息,我一直在Google上search… 另外我知道有很多探查器标志。 关于这些的其他参考也是受欢迎的。 [JavaScript的]: 滴答总nonlib名字 88414 7.9%20.1%LazyCompile:* getUniqueId C:\ n \ dev \ SCNA \ infra \ lib \ node-js \ utils \ general-utils.js:16 22797 2.0%5.2%LazyCompile:*键本机v8natives.js:333 14524 1.3%3.3%LazyCompile:Socket._flush C:\ n \ dev \ […]

监视Node.js进程中的最大内存消耗

我正在寻找一种跨平台的方式来可靠地监控Node.js进程中的最大内存消耗,无论是否存在泄漏。 在我的情况下的过程都是真正的应用程序和综合testing。 我会期待它的工作 process.on('exit', () => { console.log('Max memory consumption: ' + …); }); 有可能追踪内存消耗与node –trace_gc … ,但这导致了难以阅读的输出(可能很难分析编程)。 另外,即使内存使用量很大,当脚本结束得太快,GC也不会发生。 从我所看到的主题memwatch ,通常build议使用memwatch ,比如: require('memwatch-next').on('stats', stats => { console.log('Max memory consumption: ' + stats.max); }); 但在我的情况下,只有当GC已经发生或根本没有触发时才触发,因此确定RAM消耗峰值是没有用的。 如果可能,我宁愿避免像node-inspector器那样的GUI工具。 这个最大的内存消耗是否可以从应用程序本身或CLI单独进行可靠地检索,跨平台?

在部署Node.js Web应用程序时,最重要的统计数据是什么?

首先 – 关于我的背景一点点:我已经编程了一段时间(在这一点上是10年),而且在编写想法时,我相当有能力。 一年前,我开始从事networking应用程序的编程工作,并且幸运地发现了nodeJS,这使得networking应用程序的创build更像传统编程。 现在,我有一个node.js应用程序,我已经开发了一段时间,现在正在运行在网上生产。 我的主要困惑源于这样一个事实,即我对networking开发的世界很陌生,并且不知道在监视我的应用程序时什么是重要的,什么是不重要的。 我正在使用Joyent SmartMachine,查看他们提供的分析选项有点压倒性。 有很多不同的选项和configuration,我不知道每个分析的目的是什么。 对于下面的问题,我会很感激任何答案,无论是Joyent的云分析还是全面的一般。 问题一 现在,我主要关心的是弄清楚我的应用程序如何利用运行的服务器。 我想知道我的应用程序是否有足够的资源分配给它。 它收到的请求的数量是否使服务器过度杀伤,还是需要额外的资源? 什么分析是非常重要的,以便为此目的查看NodeJS应用程序? (如果这种做法有所不同,则可以在不同的服务器上同时使用MongoDB和Redis) 问题二 在pipe理正在生产的服务器时,还有哪些其他统计数据通常非常重要? 我习惯于运行一次程序来执行一些特定的事情(例如,一旦它计算出图像,就结束运行的光线跟踪器),而不是连续运行并与许多客户端交互的networking应用程序。 我敢肯定有很多事情对于长期服务器pipe理员来说是显而易见的,而不是像我这样的新手。 问题三 在处理NodeJS时要特别注意什么? 当处理NodeJS的单线程事件循环与更标准的服务器系统时,什么是统计/分析变得特别重要? 我还有其他关于数据库如何进入等式的问题,但我认为现在已经足够了…

在Linux中分析Node.JS(代码)的执行时间

我正在寻找一种方法来在Linux上执行精确的Node.JS脚本执行时间分析 。 有一些有趣的项目,比如NodeTime.com性能分析器 ,但是这个分析了I / O httprequests的时间 ,而不是代码行的执行时间 。 我正在寻找一种方法来确定我可以优化我的Javascript, 大部分时间都花在哪里等。 我见过的一个有趣的方法是尝试使用DTrace创build一个FlameGraph来分析Node.JS. 但是, dtrace是非常特定于Solaris的。 对于Linux(Debian / Ubuntu),可以在sytemtap-sdt-dev包中finddtrace 。 但是, stap dtrace并不相同,并且缺less所有相关的钩子/探针。 Paul Fox从Unix版本中创build了一个端口。 它的function更完整,但是挂钩/探测器在Solaris用户空间中不起作用,也不能用于剖析节点。 ftp://crisp.dyndns-server.com/pub/release/website/dtrace/ (构build起来非常简单,请参阅自述文件。) 还有一个Oracle端口,但没有人会推荐它。 显然,它只有大约0.1%的保罗福克斯港口的探测器。 (具有讽刺意味的是,因为Oracle曾经是Sun原始作者,而Solaris是dtrace原创者) 如何在Linux中使用terminal或使用Eclipse,我可以剖析我的Node.JS脚本的代码? 我正在寻找特定的东西,比如Zend Profiler在PHP脚本代码中显示每个命令的执行时间。