Tag: 分析

表示进行asynchronous调用的中间件

我们有一个NodeJS Express应用程序,我们已经实现了一个自定义分析后端。 现在,我们正在决定如何实现跟踪机制,针对function手机等JS禁用的浏览器。 我们正在考虑的一种devise方法是创build一个中间件,拦截每个请求,从请求/上下文中提取参数并将它们发送到后端。 这是非常可扩展的,对于像我们这样的定制分析解决scheme来说非常合理。 另一种方法是创build一个像谷歌分析那样的跟踪像素,然后从中提取数据。 但是,这似乎是一个定制跟踪解决scheme的可扩展性更小的解决scheme,因为参数和数据结构可以随时改变或放大,不像GA。 我的问题是这样的 – 是否有任何其他的方面,使中间件,使asynchronous请求? 在创build服务器时,我们需要了解什么,因为对服务器的每个请求都要通过这个中间件? 我们是一个相当大的应用程序,每分钟几十万的stream量。

实时网站访客跟踪系统

我想开发一个允许我跟踪网站访问者的应用程序。 现在我正在探索node.js作为替代scheme。 这个系统将有3个部分: 服务器端脚本,可能是一个node.js服务器。 空气应用将是客户。 它将连接到node.js服务器并在线显示用户。 Javascript代码,将在网站的每个页面上的跟踪代码。 有人尝试过这样的事情吗? 任何想法,意见,build议将不胜感激。

MongoDB查询在mongo-shell上执行的时间为1ms,但在NodeJS上的执行时间为400ms以上

我有一个大的MongoDB集合,包含超过2GB的原始数据,我使用一个非常简单的查询来从集合中获取特定的文档。 文档大小的范围从10KB到4MB,Id字段被定义为索引。 这是我正在使用的查询(与mongojs模块): db.collection('categories').find({ id: category_id }, function(err, docs) { callback(err, docs.length ? docs[0] : false); }).limit(1); 当我使用MongoDB shell或Robomongo等GUI来执行这个查询时,无论物理大小如何,大约需要1ms的时间,但是当我在NodeJS上执行完全相同的查询时,响应时间从2ms到2s以上取决于数据量。 我只测量接收响应所需的时间,即使在.explain()等待超过500毫秒的情况下,MongoDB分析器( .explain() )显示仅执行一个毫秒即可执行查询。 现在,我可能做错了什么,但我不知道它是什么。 我对NodeJS比较陌生,但过去我曾经使用过MongoDB和PHP,而且从来没有遇到这样的性能问题,所以我倾向于认为我可能以某种方式滥用NodeJS。 我也试过在WebStorm上使用SpyJS进行分析,我看到有很多bson.deserialize调用快速地汇总成一个大堆栈,但是我无法进一步调查,因为SpyJS总是在这个时候崩溃。 可能有关,但我仍然不知道如何处理它。 请指教,任何线索将不胜感激。 编辑:这是db.categories.getIndexes()的结果: [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "my_db.categories" }, { "v" : 1, "key" : { "id" […]

在Linux上分析Node.js Web应用程序

哪个将是在Linux上configurationNode.js应用程序的最佳select? 我试过https://github.com/c4milo/node-webkit-agent和https://github.com/baryshev/look (这是基于节点时间),但他们都似乎相当实验。 最令我惊讶的是,这些工具报告的结果是不同的。 外观的主要缺点是堆快照不是很相关,你不能超过1分钟的CPUconfiguration文件。 使用node-webkit-agent,Chrome浏览器的内存不足。 我在使用JMeter向我的Web应用程序发送请求时正在执行分析。

在Node.js程序上使用DTrace时没有函数名称

我试图根据本指南在VirtualBox中的OmniOS虚拟机上使用DTrace进行Node.js程序的CPU分析,我完全按照以下步骤设置(除了使用节点0.10.26)。 不幸的是,DTrace不给我人类可读的JS函数名称,但只是原始函数地址(据我所知),看起来像这样,并不是很有帮助: CPU ID FUNCTION:NAME 0 66407 :tick-30s node`v8::internal::String::ComputeHashField(unibrow::CharacterStream*, int, unsigned int)+0x162 node`v8::internal::Utf8SymbolKey::Hash() [clone .part.342]+0xb9 node`v8::internal::HashTable<v8::internal::SymbolTableShape, v8::internal::HashTableKey*>::FindEntry(v8::internal::Isolate*, v8::internal::HashTableKey*)+0x20 node`v8::internal::SymbolTable::LookupKey(v8::internal::HashTableKey*, v8::internal::Object**)+0x38 node`v8::internal::SymbolTable::LookupSymbol(v8::internal::Vector<char const>, v8::internal::Object**)+0x4e node`v8::internal::Heap::LookupSymbol(v8::internal::Vector<char const>)+0x34 node`v8::internal::Factory::LookupSymbol(v8::internal::Vector<char const>)+0x34 node`v8::internal::JSProxy::CallTrap(char const*, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*)+0x76 node`v8::internal::JSProxy::GetPropertyWithHandler(v8::internal::Object*, v8::internal::String*)+0x108 node`v8::internal::Object::GetProperty(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::LookupResult*, v8::internal::Handle<v8::internal::String>, PropertyAttributes*)+0x57 node`v8::internal::LoadIC::Load(v8::internal::InlineCacheState, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::String>)+0x49d node`v8::internal::LoadIC_Miss(v8::internal::Arguments, v8::internal::Isolate*)+0xbd 0xa730a376 0x8966eee0 0x8968bb7c 0xa7321899 0xa731308a 以上是运行这些命令的结果: dtrace -n 'profile-97/pid == 12345 […]

在本地服务器上复制heroku / node.js内存泄露以进行debugging

如何在本地复制Heroku的内存问题进行debugging? 或更好的configuration文件内存使用Heroku? 我在Heroku上有一个Node.js应用程序。 一个服务器端实用程序做了一堆工作来生成用于用户项目的下载文件。 对于一个特别大的情况,Heroku经过一些练习后会产生以下警告: Process running mem=529M(103.4%) 2015-01-24T02:23:18.240108+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:23:18.240108+00:00 heroku[web.1]: Process running mem=529M(103.4%) … 在每次额外的锻炼之后,记忆的使用会增加,所以在我看来就像一个确定的泄漏: 2015-01-24T02:31:22.321689+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:31:22.321689+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:31:44.523511+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:31:44.523800+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:32:06.296071+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:32:06.296314+00:00 heroku[web.1]: Error R14 […]

有没有办法监视Node.JS应用程序的性能?

我对Node.JS很陌生,想知道有没有一种方法来监视性能,看看我的应用程序和哪个数据库事务大部分时间都是瓶颈,…

使用Segment发送Mixpanel收入服务器端

我正在尝试将服务器端的收入调用发送到细分受众群,以便将其显示为收入。 我知道,Mixpanel有一个track_charge调用,Segmentbuild议使用revenue事件。 有没有人在服务器端(特别是与Node.js)做到这一点? 这是我目前的电话 analytics.track({ userId: transaction.user.username, event: 'revenue', properties: { price: 1.00 } });

Chrome的跟踪事件分析工具中自上而下(树),自上而下(重)和自下而上(重)有什么区别

我正在尝试使用Google Chrome的跟踪事件分析工具来分析正在运行的Node.js应用程序。 一旦我select了一个点的样本,我可以select三个视图: 自上而下(树) 自上而下(重) 自下而上(重) 这些意见有什么分别? 他们各自代表什么? 从剖析的angular度来看,哪个是最有用的观点?

Dtrace没有收集NodeJS的任何数据

我试图用Dtrace来分析NodeJS,但是它没有正常工作。 我正在使用的命令是: dtrace -n 'profile-97/execname == "node" && arg1/{@[jstack(150, 8000)] = count(); } tick-60s { exit(0); }' > stacks.out 我得到的输出是: CPU ID FUNCTION:NAME 0 312432 :tick-30s 如果我做dtrace -l然后我得到例如: 58814 instr kernel setup_APIC_eilvt-jne 0xffffffff81045e27 58815 instr kernel setup_APIC_eilvt-je 0xffffffff81045e34 58816 instr kernel setup_APIC_eilvt-je 0xffffffff81045e38 58817 instr kernel setup_APIC_eilvt-callr 0xffffffff81045e46 58818 instr kernel setup_APIC_eilvt-callr 0xffffffff81045e6a 58819 instr […]