13

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 に費やしているようです。

4

3 に答える 3

2

同様の問題がありました。私は Oplog を必要としなかったので、meteor パッケージ "disable-oplog" を追加するよう提案されました。そうしましたが、CPU使用率は大幅に減少しました。Oplog を実際に利用していない場合は、無効にしたほうがよい場合があります。無効にして、meteor add disable-oplog何が起こるかを確認してください。

これが役立つことを願っています。

于 2014-05-11T17:05:39.210 に答える
0

-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 

また、私のアプリはあなたのようなことをします。大気中のCFSパッケージと node-csv を使用して、アップロードした CSV を読み取ります。アップロードはうまく機能し、node-csvもうまく機能します....しかし、それが問題であるかどうかを確認できます.DigitalOceanで実行されているNODEのようです. 私のMongoDBもうまく機能します...

于 2014-04-30T03:30:41.630 に答える