Meteor Up to Digital Ocean を使用してデプロイされた Meteor (0.8.0) アプリが 100% CPU で停止し、メモリ不足でクラッシュし、100% CPU で再起動するだけです。過去24時間、このように動かなくなっています。奇妙な部分は、誰もサーバーを使用していないことと、meteor.log が多くの手がかりを示していないことです。データベース用のoplogを備えたMongoHQがあります。
デジタルオーシャンの仕様:
1GB RAM 30GB SSD ディスク ニューヨーク 2 Ubuntu 12.04.3 x64
問題を示すスクリーンショット:
スクリーンショットは昨日キャプチャされたもので、メモリ不足でクラッシュするまで 100% の CPU に固定されたままになっていることに注意してください。ログには次のように表示されます。
FATAL ERROR: Evacuation Allocation failed - process out of memory error: Forever detected script was kill by signal: SIGABRT error: Forever restarting script for 5 time
トップディスプレイ:
26308 メテロス 20 0 1573m 644m 4200 R 98.1 64.7 32:45.36 ノード
開始方法: csv または mailchimp oauth を介して電子メールのリストを取り込み、バッチ プロセス呼び出しhttp://www.fullcontact.com/developer/docs/batch/を介してそれらを fullcontact に送信し、更新するアプリがあります。 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
});
}
});
}
Vagrant を実行している脆弱な Windows ラップトップでは、一度に数十万件のメールを処理しても、パフォーマンスの問題はまったくありません。しかし、Digital Ocean では、15,000 を処理することさえできないようです (CPU が 100% に急上昇してから OOM でクラッシュするのを見たことがありますが、起動した後は通常安定します... 今回はそうではありません)。私が心配しているのは、アプリでのアクティビティがまったくないか、ほとんどないにもかかわらず、サーバーがまったく回復していないことです。私は分析を見てこれを確認しました - GA は 24 時間にわたって合計 9 セッションを示しており、/ を押したりバウンスしたりするだけです。そして、最初の失敗以来、私が行った唯一のことは、facts
パッケージをチェックすることです。
mongo-livedata 監視マルチプレクサー 13 監視ドライバー oplog 13
oplog-watchers 16 観察ハンドル 15 time-spent-in-QUERYING-phase
87828 FETCHING フェーズで費やされた時間 82 ライブデータ
無効化-クロスバー-リスナー 16 サブスクリプション 11 セッション 1
Meteor APM にも異常は何も表示されません。meteor.log には、OOM と再起動メッセージ以外に meteor の活動は表示されません。MongoHQ は、実行速度の遅いクエリや多くのアクティビティを報告していません。モニタリング ダッシュボードを凝視しているため、平均でクエリ、更新、挿入、削除はありません。私の知る限り、この 24 時間はあまり活動がなく、確かに集中的な活動はありませんでした。それ以来、newrelic と nodetime をインストールしようとしましたが、どちらもまったく機能していません - newrelic にはデータが表示されず、meteor.log には nodetime デバッグ メッセージがあります
nodetime-native 拡張機能のロードに失敗しました。
そのため、nodetime の CPU プロファイラーを使用しようとすると、空白になり、ヒープ スナップショットがError: V8 tools are not loaded で返されます。
この時点では基本的にアイデアがありません。Node は私にとってかなり新しいものなので、ここで暗闇の中で野生の刺し傷をしているように感じます. 助けてください。
更新: サーバーは 4 日後も 100% に固定されています。init 6 でも何もしません。サーバーが再起動し、ノード プロセスが開始され、100% の CPU に戻ります。memwatch や webkit-devtools-agent などの他のツールを試しましたが、Meteor で動作させることができませんでした。
以下はstraceの出力です
strace -c -p 6840
プロセス 6840 が接続されました - 中断して終了します
^Cプロセス 6840 が切り離されました
% time seconds usecs/call 呼び出しエラー syscall
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 フテックス
1.49 0.001416 0 45176 書き込み
0.68 0.000646 0 119975 ムンマップ
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 ブレーキ
100.00 0.094735 1007268 39908 合計
そのため、ノード プロセスはほとんどの時間を epoll_wait に費やしているようです。