lan*_*and 13 ubuntu node.js meteor ubuntu-12.04 digital-ocean
我有一个使用Meteor Up to Digital Ocean部署的Meteor(0.8.0)应用程序,该应用程序一直停留在100%CPU,只是因内存不足而崩溃,并以100%CPU再次启动.在过去的24小时里,它一直都是这样.奇怪的部分是没有人使用服务器和meteor.log没有显示太多的线索.我有MongoHQ和数据库的oplog.
数字海洋规格:
1GB Ram 30GB SSD Disk New York 2 Ubuntu 12.04.3 x64
截图显示问题:

请注意,屏幕截图是昨天捕获的,并且它一直保持在100%cpu,直到它因内存不足而崩溃.日志显示:
致命错误:疏散分配失败 - 处理内存不足错误:永远检测到的脚本被信号杀死:SIGABRT错误:永远重启脚本5次
热门显示:
26308 meteorus 20 0 1573m 644m 4200 R 98.1 64.7 32:45.36节点
它是如何开始的:我有一个应用程序通过csv或mailchimp oauth接收电子邮件列表,通过批处理过程调用将它们发送到完全接触http://www.fullcontact.com/developer/docs/batch/然后更新相应的Meteor集合取决于响应状态.来自200响应的片段
if (result.statusCode === 200) {
var data = JSON.parse(result.content);
var rate_limit = result.headers['x-rate-limit-limit'];
var rate_limit_remaining = result.headers['x-rate-limit-remaining'];
var rate_limit_reset = result.headers['x-rate-limit-reset'];
console.log(rate_limit);
console.log(rate_limit_remaining);
console.log(rate_limit_reset);
_.each(data.responses, function(resp, key) {
var email = key.split('=')[1];
if (resp.status === 200) {
var sel = {
email: email,
listId: listId
};
Profiles.upsert({
email: email,
listId: listId
}, {
$set: sel
}, function(err, result) {
if (!err) {
console.log("Upsert ", result);
fullContactSave(resp, email, listId, Meteor.userId());
}
});
RawCsv.update({
email: email,
listId: listId
}, {
$set: {
processed: true,
status: 200,
updated_at: new Date().getTime()
}
}, {
multi: true
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
在我运行Vagrant的wimpy Windows笔记本电脑上,我没有任何性能问题,无论何时一次处理数十万封电子邮件.但是在数字海洋上,它似乎甚至无法处理15,000(我已经看到CPU飙升至100%然后与OOM崩溃,但是在它出现之后它通常是稳定的......不是这次).令我担心的是,尽管应用程序没有/很少活动,服务器根本没有恢复.我通过查看分析来验证这一点 - GA在24小时内总共显示9个会话,而不仅仅是点击/弹跳,MixPanel在同一时间段内仅显示1个登录用户(我).我从最初的失败以来唯一做的就是检查facts包,其中显示:
mongo-livedata observe-multiplexers 13 observe-drivers-oplog 13
oplog-watchers 16观察 - 处理15个花在查询阶段的时间
87828在FETCHING-phase 82期间花费的时间
invalidation-crossbar-listeners 16个订阅11个会话1
Meteor APM也没有显示任何异常,meteor.log不会显示除OOM以外的任何流星活动并重新启动消息.MongoHQ没有报告任何运行缓慢的查询或大量活动 - 从查看监控仪表板的平均值上查询,更新,插入,删除0次.据我所知,24小时内没有太多活动,当然也没有什么密集的.我已经尝试安装newrelic和nodetime但两者都没有工作 - newrelic显示没有数据,meteor.log有一个nodetime调试消息
加载的nodetime-native扩展失败.
因此,当我尝试使用nodetime的CPU分析器时,它变为空白,堆快照返回错误:未加载V8工具.
在这一点上我基本上没有想法,因为Node对我来说很新,感觉就像我在黑暗中采取疯狂的刺.请帮忙.
更新:四天后服务器仍然以100%挂钩.即使是init 6也没有做任何事情 - 服务器重启,节点进程启动并跳回到100%cpu.我尝试了其他工具,如memwatch和webkit-devtools-agent,但无法让它们与Meteor一起工作.
以下是strace输出
strace -c -p 6840
附加过程6840 - 中断退出
^ CProcess 6840分离
%time秒usecs/call calls错误系统调用
77.17 0.073108 1 113701 epoll_wait
11.15 0.010559 0 80106 39908 mmap
6.66 0.006309 0 116907阅读
2.09 0.001982 0 84445 futex
1.49 0.001416 0 45176写
0.68 0.000646 0 119975 munmap
0.58 0.000549 0 227402 clock_gettime
0.10 0.000095 0 117617 rt_sigprocmask
0.04 0.000040 0 30471 epoll_ctl
0.03 0.000031 0 71428 gettimeofday
0.00 0.000000 0 36 mprotect
0.00 0.000000 0 4 brk
100.00 0.094735 1007268 39908总计
所以看起来节点进程大部分时间都花在epoll_wait上.
-你在使用Meteor-up吗?我也用纽约2
在我的本地环境中,ubuntu 服务器虚拟机仅 512 Mb 和 1 个核心即可正常工作。
我在 DigitalOcean 4 Gb RAM、2 核 VPS + Meteorup(当然还有我的应用程序)上遇到了同样的问题。
LOCAL ENVIROMENT on virtualbox - 1 CORE - 512 MB - New York 2 - ubuntu 14.04 x86.
-------------------------------------
>Meteor.js = 0.8.0,
>Node = 0.10.26,
>MongoDB shell version = 2.4.10,
>%CPU = 20.8 avg,
>%MEM = 27.4 avg
DIGITALOCEAN 4 GB RAM - 2 CPUS - ubuntu 14.04 x64.
-------------------------------------
>Meteor.js = 0.8.0,
>Node = 0.10.26,
>MongoDB shell version = 2.4.10,
>%CPU = 101.8 avg,
>%MEM = 27.4 avg
> PID meteoru+ 20 0 1644244 796692 6228 R **102.2** **32.7** 84:47.08 node
Run Code Online (Sandbox Code Playgroud)
另外,我的应用程序做了类似你的事情。我使用大气中的CFS包和 node-csv 来读取我上传的 CSV。上传效果很好,node-csv 也很好......但我可以向你确认这是否是问题所在,它似乎是在 DigitalOcean 上运行的 NODE。我的 MongoDB 也运行得很好...
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |